Phân biệt câu lệnh Join và Where trong SQL

Em đang học sql. Em thấy để kết nối các bảng với nhau thì dùng join. Tuy nhiên khi dùng where cũng có thể kết nối được các bảng lại với nhau.

  • Mọi người có thể phân biệt giúp e được không ạ
  • Dùng cái nào tốt hơn ạ.

Em cảm ơn

Thực ra là không khác biệt, nhanh hay chậm nó phụ thuộc vào bộ optimizer nó chọn join types là gì, join types có 3 kiểu: (hash, merge, loop), chú search về cái này thêm.
Bộ optimizer của mỗi hệ quản trị là khác nhau, và nó sẽ tự động chọn join type tối ưu nhất, đa số trường hợp nó tự động tối ưu được hết. một số trường hợp không được, mình ép nó theo kiểu mình muốn được.
Chú có thể chạy execution plan để biết bộ optimizer đang chọn kiểu join nào cho câu Sql của chú.

5 Likes

Theo mình được học thì việc kết nói các bảng với nhau là dùng khóa chính khóa phụ, còn join với where dùng trong câu lệnh SELECT :grin: . bạn có thể nói rõ hơn về phân biệt trong trường hợp nào ko?

người hỏi và người trả lời chắc mới học sql, đơn giản là khi dùng where nối bảng thì sẽ có cột dữ liệu 2 bảng trùng nhau, còn join thì ko bị như v => tất nhiên ng ta sẽ dùng join mới tối ưu hóa truy vấn, ngoài ra còn left, right, full join,… tối ưu hơn nữa sẽ dùng điều kiện lồng

Join thì nó có nhiều loại Join mà thằng where thì nó tương tự như “inner join” nên 2 cái này dùng như nhau thôi bạn. Nhưng thường thì sài join do khi mình sài thằng design query nó hay build code là inner join.

Có lẽ ý bạn là viết ntn:

select R.a, S.b
from R, S
where R.id = S.rid

Đây là cách viết cũ. SQL-92 (1993 :smiley: ) chuẩn hóa các từ khóa kết bảng như JOIN ON thể hiện rõ ý đồ hơn, thay cho những toán tử khó đỡ như (+) hay *=, *=*.

2 Likes

Nếu bạn viết kiểu dùng JOIN, nghĩa là bạn đang đi theo chuẩn ANSI SQL 1999, đa số các CSDL hiện đại điều hổ trợ ANSI SQL 1999 tuy mức độ có khác nhau.
JOIN có ưu điểm so với kiểu viết truyền thống là sự hổ trợ cho OUTER JOIN mà kiểu viết truyền thông ko có, hoặc các hệ QT CSDL phải chế thêm.
Về performance thì ko có gì khác, chỉ khác nhau về cú pháp.

1 Like

ah tớ đang nhắc đến physical join type, cậu hỏi chắc nói về cú pháp join

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?