SQL Server cung cấp các kiểu JOIN là INNER JOIN, OUTER JOIN, và CROSS JOIN.
INNER JOIN trả về kết quả là các bản ghi mà trường được join ở hai bảng khớp nhau, các bản ghi chỉ xuất hiện ở một trong hai bảng sẽ bị loại.
(hình lấy từ codinghorror.com)
OUTER JOIN nới lỏng hơn, lấy về các bản ghi có mặt
trong cả hai bảng và cả các bản ghi chỉ xuất hiện ở một trong hai bảng.
Kiểu JOIN này được chia làm hai loại:- FULL OUTER JOIN: kết quả gồm tất cả các bản ghi của cả hai bảng. Với
các bản ghi chỉ xuất hiện trong một bảng thì các cột dữ liệu từ bảng
kia được điền giá trị NULL.
- HALF OUTER JOIN (LEFT hoặc RIGHT): nếu bảng A LEFT OUTER JOIN với
bảng B thì kết quả gồm các bản ghi có trong bảng A, với các bản ghi
không có mặt trong bảng B thì các cột từ B được điền NULL. Các bản ghi
chỉ có trong B mà không có trong A sẽ không được trả về.
Ví dụ:
CREATE TABLE T1(ID1 INT, Ten VARCHAR(100) ) INSERT INTO T1 SELECT 1, 'Mozart' UNION ALL SELECT 2, 'Beethoven' UNION ALL SELECT 3, 'Chopin' CREATE TABLE T2(ID2 INT, Email VARCHAR(100) ) INSERT INTO T2 SELECT 2, 'beethoven@gmail.com' UNION ALL SELECT 3, 'chopin@hotmail.com' UNION ALL SELECT 4, 'haydn@yahoo.com' UNION ALL SELECT 5, 'bach@yahoo.com'
FULL OUTER JOIN:
LEFT OUTER JOIN:
CROSS JOIN:
Lưu ý là “A INNER JOIN B” có thể viết tắt thành “A JOIN B”, còn “A LEFT OUTER JOIN B” có thể viết “A LEFT JOIN B”.
Trong các loại JOIN trên, chỉ trừ HALF OUTER JOIN còn tất cả đều có tính đối xứng, nghĩa là “A JOIN B” tương tự như “B JOIN A”. Riêng HALF OUTER JOIN thì phân biệt thứ tự, ví dụ “A LEFT JOIN B” khác với “B LEFT JOIN A”. Tuy nhiên, “A LEFT JOIN B” tương đương với “B RIGHT JOIN A”, vì thế để tránh nhầm lẫn tôi luôn hay dùng LEFT JOIN thay cho RIGHT JOIN, và ngầm qui định trong đầu là A là bảng chính còn B là bảng join (bảng để kéo thêm dữ liệu vào).
Bạn cần đặc biệt chú ý khi dùng CROSS JOIN vì nó có thể tạo ra bùng nổ về số bản ghi. Ví dụ nếu hai bảng có số bản ghi tương ứng là 1 nghìn và 1 triệu thì kết quả sẽ là 1 tỷ bản ghi. Nói chung CROSS JOIN thường được dùng rất ít nhưng vẫn có lúc cần, ví dụ bảng kết quả điểm thi của sinh viên là CROSS JOIN của bảng sinh viên và bảng môn học (giả sử mỗi sinh viên cần lấy đủ tất cả các môn học).
Các kiểu viết JOIN
Cách viết JOIN như trên gọi là theo kiểu ANSI (ANSI style), cách viết kiểu cũ là đưa điều kiện join vào mệnh đề WHERE:
--INNER JOIN kiểu ANSI SELECT * FROM T1 JOIN T2 ON T1.ID = T2.ID --INNER JOIN kiểu cũ SELECT * FROM T1, T2 WHERE T1.ID = T2.ID -- LEFT OUTER JOIN kiểu ANSI SELECT * FROM T1 LEFT JOIN T2 ON T1.ID = T2.ID --LEFT OUTER JOIN kiểu cũ SELECT * FROM T1, T2 WHERE T1.ID *= T2.ID
T-Fal Titanium Pan - TiV-3.00 - TiV-3.00
ReplyDeleteT-Fal Titanium Pan. T-Fal Titanium Pan. T-Fal Titanium Pan. T-Fal Titanium Pan. T-Fal columbia titanium pants Titanium Pan. T-Fal Titanium Pan. T-Fal Titanium Pan. T-Fal titanium watch band Titanium titanium cookware Pan. T-Fal babylisspro nano titanium T-Fal titanium frames Titanium