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
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.
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ú.
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
. 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 ) 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 *=
, *=*
.
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.
ah tớ đang nhắc đến physical join type, cậu hỏi chắc nói về cú pháp join