Không có loại tham gia "tốt hơn" hay "tệ hơn". Chúng có ý nghĩa khác nhau và chúng phải được sử dụng tùy thuộc vào nó.
Trong trường hợp của bạn, bạn có thể không có nhân viên không có work_log (không có hàng trong bảng đó), do đó LEFT JOIN
và JOIN
sẽ tương đương trong kết quả. Tuy nhiên, nếu bạn có một thứ như vậy (một nhân viên mới không có work_log đã đăng ký), thì sẽ JOIN
bỏ qua nhân viên đó, trong khi một người tham gia bên trái (có bàn đầu tiên là nhân viên) sẽ hiển thị tất cả trong số họ và null trên các trường từ work_log nếu có không khớp
Một lần nữa, hiệu suất là một điều thứ yếu để truy vấn tính chính xác. Một số người nói rằng bạn không nên sử dụng LEFT JOIN
s. Đúng là LEFT THAM GIA buộc trình tối ưu hóa thực hiện truy vấn theo một thứ tự cụ thể, ngăn chặn một số tối ưu hóa (sắp xếp lại bảng) trong một số trường hợp. Đây là một ví dụ . Nhưng bạn không nên chọn cái khác nếu tính chính xác / ý nghĩa bị hy sinh, vì INNER THAM GIA vốn không tệ hơn. Phần còn lại của tối ưu hóa thông thường áp dụng như bình thường.
Tóm lại, không sử dụng LEFT JOIN
nếu bạn thực sự có ý nghĩa INNER JOIN
.
Trong MySQL CROSS JOIN
, INNER JOIN
và JOIN
giống nhau. Trong tiêu chuẩn và về mặt ngữ nghĩa, a CROSS JOIN
là INNER JOIN
một ON
mệnh đề không có mệnh đề, do đó bạn có được mọi kết hợp các hàng giữa các bảng.
Bạn có ví dụ về tất cả các loại tham gia ngữ nghĩa trên Wikipedia . Trong thực tế, trong MySQL, chúng ta có xu hướng chỉ viết JOIN
và LEFT JOIN
.