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

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

FULL OUTER JOIN trong SQL Server

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

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

SELECT * FROM pm.projects;

Đây là kết quả:

Ví dụ về FULL OUTER JOIN trong SQL Server
SELECT * FROM pm.members;

Đây là kết quả:

Ví dụ về FULL OUTER JOIN trong SQL Server

Cuối cùng, truy vấn dữ liệu sử dụng mệnh đề FULL OUTER JOIN từ hai bảng projectsmembers 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ả:

Ví dụ về FULL OUTER JOIN trong SQL Server

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

Ví dụ về FULL OUTER JOIN trong SQL Server

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.



Bài viết liên quan:

Cách sử dụng mệnh đề HAVING trong SQL Server để lọc các nhóm dựa trên các điều kiện được chỉ định.

Tìm hiểu mọi thứ cần biết về trigger trong SQL Server giúp bạn sử dụng trigger hiệu quả nhất.

Tìm hiểu mọi thứ bạn cần biết về function trong SQL Server: bao gồm hàm vô hướng và hàm bảng.