Day 5_SQL Server hằng ngày - JOIN trong SQL Server
JOIN trong SQL Server giúp kết hợp dữ liệu từ nhiều bảng dựa trên một điều kiện chung. Dưới đây là các loại JOIN
phổ biến:
1️⃣ INNER JOIN
Trả về các bản ghi có giá trị khớp nhau ở cả hai bảng.
SELECT A.*, B.*
FROM TableA A
INNER JOIN TableB B ON A.ID = B.ID;
2️⃣ LEFT JOIN (LEFT OUTER JOIN) Trả về tất cả các bản ghi từ bảng bên trái (TableA) và các bản ghi khớp từ bảng bên phải (TableB). Nếu không có bản ghi phù hợp, giá trị sẽ là NULL.
SELECT A.*, B.*
FROM TableA A
LEFT JOIN TableB B ON A.ID = B.ID;
3️⃣ RIGHT JOIN (RIGHT OUTER JOIN) Trả về tất cả các bản ghi từ bảng bên phải (TableB) và các bản ghi khớp từ bảng bên trái (TableA).
SELECT A.*, B.*
FROM TableA A
RIGHT JOIN TableB B ON A.ID = B.ID;
4️⃣ FULL JOIN (FULL OUTER JOIN) Trả về tất cả các bản ghi khi có sự khớp từ một trong hai bảng. Nếu không có bản ghi phù hợp, giá trị sẽ là NULL.
SELECT A.*, B.*
FROM TableA A
FULL JOIN TableB B ON A.ID = B.ID;
5️⃣ CROSS JOIN Kết hợp tất cả các hàng của TableA với tất cả các hàng của TableB (tích Descartes).
SELECT A.*, B.*
FROM TableA A
CROSS JOIN TableB B;
6️⃣ SELF JOIN Thực hiện JOIN trên cùng một bảng.
SELECT A.*, B.*
FROM Employees A
INNER JOIN Employees B ON A.ManagerID = B.EmployeeID;
📌 Lưu ý quan trọng INNER JOIN chỉ lấy các bản ghi có dữ liệu trùng khớp giữa hai bảng. LEFT JOIN lấy tất cả dữ liệu từ bảng bên trái, ngay cả khi không có dữ liệu tương ứng ở bảng bên phải. RIGHT JOIN là ngược lại của LEFT JOIN.
FULL JOIN lấy tất cả dữ liệu từ cả hai bảng, ngay cả khi không có dữ liệu khớp.
CROSS JOIN tạo tích Descartes giữa hai bảng, số dòng = (số dòng bảng A) × (số dòng bảng B). SELF JOIN sử dụng khi cần so sánh dữ liệu trong cùng một bảng.