FULL OUTER JOIN trong SQL Server
Trong hướng dẫn này, bạn sẽ tìm hiểu cách sử dụng mệnh đề FULL OUTER JOIN
trong SQL Server để truy vấn dữ liệu từ hai hoặc nhiều bảng.
Giới thiệu về FULL OUTER JOIN trong SQL Server
Mệnh đề FULL OUTER JOIN
trả về một tập kết quả bao gồm các bản ghi từ cả hai bảng bên trái và bên phải.
Khi không có bản ghi phù hợp tồn tại cho bản ghi trong bảng bên trái, các cột của bảng bên phải sẽ có giá trị null.
Tương tự, khi không có bản ghi phù hợp tồn tại cho bản ghi trong bảng bên phải, cột của bảng bên trái sẽ có giá trị null.
Sau đây minh họa cú pháp của FULL OUTER JOIN
khi join hai bảng T1
và T2
:
SELECT
select_list
FROM
T1
FULL OUTER JOIN T2 ON join_predicate;
Từ khóa OUTER
là tùy chọn nên bạn có thể bỏ qua nó như truy vấn sau đây:
SELECT
select_list
FROM
T1
FULL JOIN T2 ON join_predicate;
Trong cú pháp này:
- Đầu tiên, chỉ định bảng bên trái
T1
trong mệnh đềFROM
. - Thứ hai, chỉ định bảng
T2
và biểu thức join.
Biểu đồ Venn sau đây minh họa FULL OUTER JOIN
hai tập kết quả:

Ví dụ về FULL OUTER JOIN trong SQL Server
Chúng ta sẽ tạo một số bảng mẫu để minh họa cho FULL OUTER JOIN
trong SQL Server.
Đầu tiên, tạo một lược đồ mới có tên pm
là viết tắt của project management (quản lý dự án).
CREATE SCHEMA pm;
GO
Tiếp theo, tạo các bảng mới có tên projects
và members
trong lược đồ pm
:
CREATE TABLE pm.projects(
id INT PRIMARY KEY IDENTITY,
title VARCHAR(255) NOT NULL
);
CREATE TABLE pm.members(
id INT PRIMARY KEY IDENTITY,
name VARCHAR(120) NOT NULL,
project_id INT,
FOREIGN KEY (project_id)
REFERENCES pm.projects(id)
);
Giả sử, mỗi thành viên chỉ có thể tham gia vào một dự án và mỗi dự án có không hoặc nhiều thành viên. Nếu một dự án đang trong giai đoạn ý tưởng, do đó không có thành viên nào được chỉ định.
Sau đó, chèn một số bản ghi vào bảng projects
và members
:
INSERT INTO
pm.projects(title)
VALUES
('New CRM for Project Sales'),
('ERP Implementation'),
('Develop Mobile Sales Platform');
INSERT INTO
pm.members(name, project_id)
VALUES
('John Doe', 1),
('Lily Bush', 1),
('Jane Doe', 2),
('Jack Daniel', null);
Sau đó, truy vấn dữ liệu từ bảng projects
và members
:
SELECT * FROM pm.projects;
Đây là kết quả:

SELECT * FROM pm.members;
Đây là kết quả:

Cuối cùng, truy vấn dữ liệu sử dụng mệnh đề FULL OUTER JOIN
từ hai bảng projects
và members
như sau:
SELECT
m.name member,
p.title project
FROM
pm.members m
FULL OUTER JOIN pm.projects p ON p.id = m.project_id;
Đây là kết quả:

Trong ví dụ này, truy vấn trả về các thành viên tham gia vào các dự án, các thành viên không tham gia vào bất kỳ dự án nào và các dự án không có bất kỳ thành viên nào.
Để tìm các thành viên không tham gia vào bất kỳ dự án và dự án nào không có bất kỳ thành viên nào, bạn thêm một mệnh đề WHERE
vào truy vấn trên như sau:
SELECT
m.name member,
p.title project
FROM
pm.members m
FULL OUTER JOIN pm.projects p ON p.id = m.project_id
WHERE
m.id IS NULL OR
P.id IS NULL;
Đây là kết quả:

Như được thể hiện rõ trong đầu ra, Jack Daniel
không tham gia vào bất kỳ dự án nào và dự án Develop Mobile Sales Platform
không có bất kỳ thành viên nào.
Trong hướng dẫn này, bạn đã học cách sử dụng mệnh đề FULL OUTER JOIN
trong SQL Server để truy vấn dữ liệu từ hai hoặc nhiều bảng.