SQL - Left Join vs Right Join: Hướng dẫn chi tiết cho người mới bắt đầu

Xin chào các bạn yêu thích SQL! 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ị qua thế giới của các loại join trong SQL. Là một ai đó đã dạy khoa học máy tính trong nhiều năm, tôi có thể đảm bảo với bạn rằng việc thành thạo join giống như mở khóa một siêu năng lực trong lĩnh vực cơ sở dữ liệu. Vậy, hãy cùng nhau lặn sâu và giải mã những bí ẩn của Left Join và Right Join nhé!

SQL - Left Join vs Right Join

Hiểu về Join: Cơ bản

Trước khi chúng ta đi sâu vào chi tiết của Left Join và Right Join, hãy bắt đầu với một bài tổng quan nhanh về join là gì trong SQL. Hãy tưởng tượng bạn đang lên kế hoạch cho một buổi tiệc và có hai danh sách: một danh sách với tên của các khách mời và một danh sách với đồ uống yêu thích của họ. Join giống như một枝 cỏ魔 pháp giúp bạn kết hợp hai danh sách này theo nhiều cách khác nhau để nhận được thông tin bạn cần.

Cách hoạt động của Left Join

Left Join là gì?

Left Join giống như việc mời tất cả mọi người trong danh sách khách mời của bạn đến buổi tiệc, bất kể bạn có biết đồ uống yêu thích của họ hay không. Nó trả về tất cả các bản ghi từ bảng bên trái (bảng đầu tiên bạn đề cập trong truy vấn) và các bản ghi khớp từ bảng bên phải.

Cú pháp Left Join

SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name;

Ví dụ Left Join

Hãy tạo hai bảng đơn giản để minh họa điều này:

CREATE TABLE Guests (
GuestID INT PRIMARY KEY,
GuestName VARCHAR(50)
);

CREATE TABLE Drinks (
DrinkID INT PRIMARY KEY,
GuestID INT,
FavoriteDrink VARCHAR(50)
);

INSERT INTO Guests (GuestID, GuestName) VALUES
(1, 'Alice'),
(2, 'Bob'),
(3, 'Charlie'),
(4, 'David');

INSERT INTO Drinks (DrinkID, GuestID, FavoriteDrink) VALUES
(1, 1, 'Mojito'),
(2, 2, 'Beer'),
(3, 3, 'Wine');

Bây giờ, hãy sử dụng Left Join để lấy tất cả các khách mời và đồ uống yêu thích của họ (nếu có):

SELECT Guests.GuestName, Drinks.FavoriteDrink
FROM Guests
LEFT JOIN Drinks ON Guests.GuestID = Drinks.GuestID;

Kết quả:

GuestName FavoriteDrink
Alice Mojito
Bob Beer
Charlie Wine
David NULL

Như bạn có thể thấy, David xuất hiện trong kết quả mặc dù chúng ta không biết đồ uống yêu thích của anh ấy là gì. Đó chính là phép màu của Left Join!

Cách hoạt động của Right Join

Right Join là gì?

Right Join giống như việc tập trung vào danh sách đồ uống và xem ai thích mỗi loại đồ uống. Nó trả về tất cả các bản ghi từ bảng bên phải và các bản ghi khớp từ bảng bên trái.

Cú pháp Right Join

SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name;

Ví dụ Right Join

Sử dụng các bảng trước đó, hãy thực hiện Right Join:

SELECT Guests.GuestName, Drinks.FavoriteDrink
FROM Guests
RIGHT JOIN Drinks ON Guests.GuestID = Drinks.GuestID;

Kết quả:

GuestName FavoriteDrink
Alice Mojito
Bob Beer
Charlie Wine

Chú ý rằng David không xuất hiện trong kết quả này vì anh ấy không có đồ uống yêu thích được liệt kê.

So sánh Left Join và Right Join

Bây giờ chúng ta đã xem xét cả hai loại join, hãy so sánh chúng bên nhau:

Yếu tố Left Join Right Join
Tập trung Tất cả bản ghi từ bảng bên trái (đầu tiên) Tất cả bản ghi từ bảng bên phải (thứ hai)
Giá trị NULL Trong cột của bảng bên phải cho các bản ghi không khớp Trong cột của bảng bên trái cho các bản ghi không khớp
Trường hợp sử dụng Khi bạn muốn tất cả các bản ghi từ bảng chính Khi bạn muốn tất cả các bản ghi từ bảng được join
Kích thước tập kết quả Luôn bao gồm tất cả các bản ghi từ bảng bên trái Luôn bao gồm tất cả các bản ghi từ bảng bên phải

Khi nào nên sử dụng Left Join vs Right Join

  1. Sử dụng Left Join khi:
  • Bạn muốn giữ lại tất cả các bản ghi từ bảng chính (bên trái).
  • Bạn chấp nhận có giá trị NULL cho các bản ghi không khớp từ bảng bên phải.
  1. Sử dụng Right Join khi:
  • Bạn muốn giữ lại tất cả các bản ghi từ bảng thứ cấp (bên phải).
  • Bạn chấp nhận có giá trị NULL cho các bản ghi không khớp từ bảng bên trái.

Mẹo chuyên nghiệp

Trong nhiều năm dạy học, tôi đã nhận thấy rằng nhiều nhà phát triển thường偏好 Left Join hơn Right Join. Tại sao? Nó thường dễ đọc và dễ hiểu hơn. Bạn luôn có thể viết lại Right Join thành Left Join bằng cách đơn giản là đổi thứ tự bảng. Vậy, nếu bạn thấy Right Join khó hiểu, đừng ngần ngại sử dụng Left Join!

Bài tập thực hành

Hãy cố định kiến thức của chúng ta với một bài tập thú vị. Hãy tưởng tượng bạn đang tổ chức một câu lạc bộ đọc sách. Bạn có hai bảng: MembersBooks.

CREATE TABLE Members (
MemberID INT PRIMARY KEY,
MemberName VARCHAR(50)
);

CREATE TABLE Books (
BookID INT PRIMARY KEY,
MemberID INT,
BookTitle VARCHAR(100)
);

INSERT INTO Members (MemberID, MemberName) VALUES
(1, 'Emma'),
(2, 'James'),
(3, 'Sophia'),
(4, 'Oliver');

INSERT INTO Books (BookID, MemberID, BookTitle) VALUES
(1, 1, 'Pride and Prejudice'),
(2, 2, '1984'),
(3, 2, 'To Kill a Mockingbird'),
(4, 3, 'The Great Gatsby');

Bây giờ, hãy thử các truy vấn này:

  1. Left Join để lấy tất cả các thành viên và sách của họ (nếu có):
SELECT Members.MemberName, Books.BookTitle
FROM Members
LEFT JOIN Books ON Members.MemberID = Books.MemberID;
  1. Right Join để lấy tất cả các sách và chủ sở hữu của chúng (nếu có):
SELECT Members.MemberName, Books.BookTitle
FROM Members
RIGHT JOIN Books ON Members.MemberID = Books.MemberID;

So sánh kết quả. Bạn có nhận thấy sự khác biệt không?

Kết luận

Chúc mừng! Bạn đã vừa thành thạo nghệ thuật của Left Join và Right Join trong SQL. Nhớ rằng, thực hành là chìa khóa để thành công, vì vậy đừng ngần ngại thử nghiệm các join này trong nhiều tình huống khác nhau.

Như một lời khuyên cuối cùng, tôi luôn nói với học sinh của mình: "SQL join giống như những mảnh ghép puzzle. Càng chơi nhiều, bạn càng thành thạo trong việc ghép lại bức tranh lớn của dữ liệu của bạn!"

Chúc bạn thành công trong việc truy vấn, và hy vọng join của bạn luôn chính xác!

Credits: Image by storyset