Trong SQL Server, JOIN là từ khóa dùng để kết hợp dữ liệu từ hai hoặc nhiều bảng lại với nhau dựa trên mối quan hệ giữa các cột có liên quan (thường là khóa chính và khóa ngoại).
Giúp lấy dữ liệu kết hợp từ nhiều bảng để tạo ra báo cáo, thống kê, xử lý dữ liệu một cách đầy đủ và chính xác.
Cú pháp JOIN cơ bản
SELECT *
FROM Bang1
JOIN Bang2 ON Bang1.CotChung = Bang2.CotChung;
Có các loại Join trong SQL Server bạn cần nắm được, mời bạn xem mục tiếp theo.
Mục đích: Kết nối giao nhau (chỉ lấy phần trùng khớp)
Cú pháp:
SELECT *
FROM A
INNER JOIN B ON A.ID = B.ID;
Đặc điểm:
Chỉ lấy các dòng có giá trị khớp ở cả hai bảng.
Nếu không khớp, dòng đó bị loại bỏ.
Ví dụ:
Bảng HocSinh
ID | Ten |
---|---|
1 | An |
2 | Bình |
3 | Chi |
Bảng Diem
ID | Diem |
---|---|
1 | 8 |
3 | 9 |
Câu lệnh SQL JOIN:
SELECT * FROM HocSinh
INNER JOIN Diem ON HocSinh.ID = Diem.ID;
Kết quả:
ID | Ten | ID | Diem |
---|---|---|---|
1 | An | 1 | 8 |
3 | Chi | 3 | 9 |
➡️ Không có dòng của "Bình" vì không có điểm.
Kết nối toàn phần hoặc một bên (giữ lại các dòng không khớp)
Có 3 loại:
– Giữ lại tất cả từ bảng bên trái
SELECT *
FROM HocSinh
LEFT JOIN Diem ON HocSinh.ID = Diem.ID;
Kết quả:
ID | Ten | ID | Diem |
---|---|---|---|
1 | An | 1 | 8 |
2 | Bình | NULL | NULL |
3 | Chi | 3 | 9 |
➡️ Giữ lại "Bình" dù không có điểm.
Giữ lại tất cả từ bảng bên phải
SELECT *
FROM HocSinh
RIGHT JOIN Diem ON HocSinh.ID = Diem.ID;
➡️ Ngược lại với LEFT JOIN, giữ điểm dù không có học sinh tương ứng.
Giữ lại cả hai phía
SELECT *
FROM HocSinh
FULL JOIN Diem ON HocSinh.ID = Diem.ID;
➡️ Kết quả bao gồm tất cả dòng từ cả 2 bảng, dù khớp hay không khớp.
Đặc điểm INNER JOIN LEFT JOIN RIGHT JOIN FULL JOIN
Đặc điểm | INNER JOIN |
LEFT JOIN |
RIGHT JOIN |
FULL JOIN |
---|---|---|---|---|
Lấy dòng khớp | ✅ | ✅ | ✅ | ✅ |
Lấy dòng không khớp bên trái | ❌ | ✅ | ❌ | ✅ |
Lấy dòng không khớp bên phải | ❌ | ❌ | ✅ | ✅ |
Có thể có NULL ở phía không khớp | ❌ | ✅ | ✅ | ✅ |
4. Kinh nghiệm sử dụng Join trong SQL Server
INNER JOIN: Dùng khi chỉ cần dữ liệu trùng khớp.
LEFT OUTER JOIN: Dùng khi muốn lấy tất cả dữ liệu từ bảng chính, kể cả khi bảng phụ không có.
FULL OUTER JOIN: Dùng khi muốn lấy mọi dòng từ cả 2 bảng, kể cả không khớp.
Tìm kiếm:
Hướng dẫn chi tiết về INNER JOIN và OUTER JOIN trong SQL Server, kinh nghiệm thực tế về join