SQL Server: LEFT, RIGHT & FULL JOIN
1. LEFT JOIN:
LEFT JOIN hay LEFT OUTER JOIN dùng để lấy dữ liệu liên quan đến hai bảng và lấy thêm những bản ghi nằm ở bảng bên trái kết nối dù những bản ghi này không liên quan đến những bản ghi của bảng nằm bên phải kết nối.
Ví dụ, bảng Student có ba bản ghi lưu trữ ba sinh viên với mã sinh viên là 1, 2 và 3, còn bảng Marks có các bản ghi lưu trữ điểm của các sinh viên có mã 1 và 2. Điều này có nghĩa là sinh viên có mã là 3 không có điểm lưu trữ trong bảng Marks.
Nếu bạn muốn hiển thị tất cả các sinh viên cả có điểm và không có điểm thì ta dùng cú pháp sau:
SELECT Các_cột FROM Bảng_bên_trái Bí_danh1 LEFT JOIN Bảng_bên_phải Bí_danh2 ON Bí_danh1.Cột_chung=Bí_danh2.Cột_chung;
Ví dụ:
SELECT studentname,mark FROM Student a LEFT JOIN Marks b ON a.studentid=b.studentid;
2. RIGHT JOIN:
Ngược với LEFT JOIN, RIGHT JOIN hay RIGHT OUTER JOIN dùng để lấy dữ liệu liên quan đến hai bảng và lấy thêm những bản ghi nằm ở bảng bên phải kết nối dù những bản ghi này không liên quan đến những bản ghi của bảng nằm bên trái kết nối.
Ví dụ, bảng Subjects có ba bản ghi lưu trữ ba môn học với mã tương ứng là là 1, 2 và 3, còn bảng Marks có các bản ghi lưu trữ điểm của các môn học có mã 1 và 2. Điều này có nghĩa là môn học có mã là 3 không có điểm lưu trữ trong bảng Marks.
Nếu bạn muốn hiển thị tất cả các môn học cả có điểm và không có điểm thì ta dùng cú pháp sau:
SELECT Các_cột FROM Bảng_bên_trái Bí_danh1 RIGHT JOIN Bảng_bên_phải Bí_danh2 ON Bí_danh1.Cột_chung=Bí_danh2.Cột_chung;
Ví dụ:
SELECT subjectname,mark FROM Marks a RIGHT JOIN Subjects b ON a.studentid=b.studentid;
3. FULL JOIN:
Đây là sự kết hợp của LEFT JOIN và RIGHT JOIN.
FULL JOIN hay FULL OUTER JOIN dùng để lấy dữ liệu liên quan đến các bảng và lấy thêm những bản ghi nằm ở bảng bên trái và bên phải kết nối dù những bản ghi này không liên quan đến những bản ghi của bảng nằm bên trái và bên phải kết nối.
Ví dụ, bảng Student có ba bản ghi lưu trữ ba sinh viên với mã sinh viên là 1, 2 và 3, còn bảng Marks có các bản ghi lưu trữ điểm của các sinh viên có mã 1 và 2. Điều này có nghĩa là sinh viên có mã là 3 không có điểm lưu trữ trong bảng Marks. Còn bảng Subjects có ba bản ghi lưu trữ ba môn học với mã tương ứng là là 1, 2 và 3, còn bảng Marks có các bản ghi lưu trữ điểm của các môn học có mã 1 và 2. Điều này có nghĩa là môn học có mã là 3 không có điểm lưu trữ trong bảng Marks.
Nếu bạn muốn hiển thị tất cả các sinh viên và môn học bao gồm cả điểm và không có điểm thì ta dùng cú pháp sau:
SELECT Các_cột FROM Bảng1 Bí_danh1 FULL JOIN Bảng2 Bí_danh2 ON Bí_danh1.Cột_chung=Bí_danh2.Cột_chung FULL JOIN Bảng3 Bí_danh3 ON Bí_danh2.Cột_chung1=Bí_danh3.Cột_chung1;
Ví dụ:
SELECT * FROM Student a FULL JOIN Marks b ON a.studentid=b.studentid FULL JOIN Subjects c ON b.subjectid=c.subjectid;