SQL - Full Join: Hướng dẫn chi tiết cho người mới bắt đầu
Xin chào các bạn, những nhà vô địch SQL tương lai! Tôi rất vui mừng được làm hướng dẫn viên của bạn trong hành trình thú vị vào thế giới của SQL Full Joins. Là một giáo viên khoa học máy tính với nhiều năm kinh nghiệm, tôi đã thấy rất nhiều học sinh ánh lên khi họ cuối cùng hiểu được khái niệm mạnh mẽ này. Vậy hãy c rolled up our sleeves và nhảy vào!
The SQL Full Join
Full Join là gì?
Hãy tưởng tượng bạn đang lên kế hoạch cho một bữa tiệc lớn và bạn có hai danh sách khách: một cho bạn bè và một cho gia đình. Full Join giống như việc kết hợp hai danh sách này một cách bao gồm tất cả mọi người, ngay cả khi họ chỉ có trong một danh sách. Trong thuật ngữ SQL, Full Join trả về tất cả các hàng từ cả hai bảng, bất kể có khớp hay không.
Cú pháp của Full Join
Dưới đây là cú pháp cơ bản của Full Join:
SELECT columns
FROM table1
FULL JOIN table2
ON table1.column = table2.column;
Hãy phân tích này:
-
SELECT columns
: Chỉ định các cột bạn muốn trong kết quả. -
FROM table1
: Đây là bảng đầu tiên của bạn. -
FULL JOIN table2
: Điều này告诉 SQL rằng bạn muốn thực hiện Full Join với bảng thứ hai. -
ON table1.column = table2.column
: Đây là điều kiện join của bạn, chỉ định cách các bảng liên quan.
Một ví dụ đơn giản
Giả sử chúng ta có hai bảng: Employees
và Departments
.
-- Tạo bảng Employees
CREATE TABLE Employees (
EmployeeID INT PRIMARY KEY,
Name VARCHAR(50),
DepartmentID INT
);
-- Tạo bảng Departments
CREATE TABLE Departments (
DepartmentID INT PRIMARY KEY,
DepartmentName VARCHAR(50)
);
-- Chèn một số dữ liệu
INSERT INTO Employees VALUES (1, 'Alice', 1), (2, 'Bob', 2), (3, 'Charlie', NULL);
INSERT INTO Departments VALUES (1, 'HR'), (2, 'IT'), (3, 'Finance');
-- Thực hiện Full Join
SELECT e.Name, d.DepartmentName
FROM Employees e
FULL JOIN Departments d ON e.DepartmentID = d.DepartmentID;
Truy vấn này sẽ trả về:
Name | DepartmentName |
---|---|
Alice | HR |
Bob | IT |
Charlie | NULL |
NULL | Finance |
Chú ý cách Charlie (người không được phân công vào một bộ phận nào) và Finance (không có nhân viên) vẫn được bao gồm trong kết quả. Đó là phép màu của Full Join!
Kết hợp nhiều bảng với Full Join
Bây giờ, hãy nâng cấp một chút. Nếu chúng ta muốn kết hợp hơn hai bảng? Không có vấn đề gì! Full Joins có thể xử lý điều đó.
Ví dụ kết hợp ba bảng
Hãy thêm bảng Projects
vào ví dụ trước:
-- Tạo bảng Projects
CREATE TABLE Projects (
ProjectID INT PRIMARY KEY,
ProjectName VARCHAR(50),
DepartmentID INT
);
-- Chèn một số dữ liệu
INSERT INTO Projects VALUES (1, 'Website Redesign', 2), (2, 'Employee Survey', 1), (3, 'Cost Cutting', 3);
-- Thực hiện Full Join với ba bảng
SELECT e.Name, d.DepartmentName, p.ProjectName
FROM Employees e
FULL JOIN Departments d ON e.DepartmentID = d.DepartmentID
FULL JOIN Projects p ON d.DepartmentID = p.DepartmentID;
Truy vấn này sẽ cho chúng ta cái nhìn toàn diện về nhân viên, bộ phận của họ và các dự án liên quan:
Name | DepartmentName | ProjectName |
---|---|---|
Alice | HR | Employee Survey |
Bob | IT | Website Redesign |
Charlie | NULL | NULL |
NULL | Finance | Cost Cutting |
Thật tuyệt vời phải không? Chỉ với một truy vấn, chúng ta có thể thấy toàn bộ bức tranh với X-ray vision cho cơ sở dữ liệu của bạn!
Full Join với WHERE Clause
Đôi khi, chúng ta muốn lọc kết quả Full Join của mình. Đó là lúc WHERE clause rất hữu ích.
Lọc kết quả Full Join
Hãy sửa truy vấn trước để chỉ hiển thị các bộ phận có dự án:
SELECT e.Name, d.DepartmentName, p.ProjectName
FROM Employees e
FULL JOIN Departments d ON e.DepartmentID = d.DepartmentID
FULL JOIN Projects p ON d.DepartmentID = p.DepartmentID
WHERE p.ProjectName IS NOT NULL;
Truy vấn này sẽ cho chúng ta:
Name | DepartmentName | ProjectName |
---|---|---|
Alice | HR | Employee Survey |
Bob | IT | Website Redesign |
NULL | Finance | Cost Cutting |
Chú ý cách Charlie đã biến mất khỏi kết quả của chúng ta, vì anh ấy không liên quan đến bất kỳ dự án nào.
Xử lý giá trị NULL
Khi làm việc với Full Joins, bạn sẽ thường gặp giá trị NULL. Dưới đây là một mẹo chuyên nghiệp: sử dụng COALESCE để thay thế NULL bằng giá trị mặc định:
SELECT
COALESCE(e.Name, 'Unassigned') AS EmployeeName,
COALESCE(d.DepartmentName, 'No Department') AS DepartmentName,
COALESCE(p.ProjectName, 'No Project') AS ProjectName
FROM Employees e
FULL JOIN Departments d ON e.DepartmentID = d.DepartmentID
FULL JOIN Projects p ON d.DepartmentID = p.DepartmentID;
Truy vấn này sẽ cho chúng ta kết quả thân thiện hơn với người dùng:
EmployeeName | DepartmentName | ProjectName |
---|---|---|
Alice | HR | Employee Survey |
Bob | IT | Website Redesign |
Charlie | No Department | No Project |
Unassigned | Finance | Cost Cutting |
Tuyệt vời hơn phải không? Bây giờ chúng ta có cái nhìn rõ ràng về toàn bộ tổ chức của mình, bao gồm cả nhân viên không có bộ phận và bộ phận không có dự án.
Kết luận
Và thế là chúng ta đã đi qua vùng đất của SQL Full Joins, từ khái niệm cơ bản đến các kỹ thuật nâng cao. Nhớ rằng, Full Joins giống như lời mời tham gia派对 - mọi người đều được chào đón, dù có khớp hay không.
Khi bạn thực hành các khái niệm này, bạn sẽ thấy rằng Full Joins là công cụ mạnh mẽ cho phân tích và báo cáo dữ liệu. Chúng cho phép bạn thấy toàn bộ bức tranh của dữ liệu của bạn, bao gồm cả những gì có thể bị thiếu.
Tiếp tục thử nghiệm, tiếp tục kết hợp, và quan trọng nhất, hãy tiếp tục vui vẻ với SQL! Trước khi bạn biết, bạn sẽ trở thành ninja Full Join trong đội của mình. Hãy mã hóa vui vẻ!
Credits: Image by storyset