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!

SQL - Full Join

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: EmployeesDepartments.

-- 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