RIGHT JOIN (hay còn gọi là RIGHT OUTER JOIN) là một kiểu liên kết trong MySQL, tương tự như LEFT JOIN, nhưng nó trả về tất cả các hàng từ bảng bên phải (bảng thứ hai được khai báo), và chỉ trả về các hàng tương ứng từ bảng bên trái nếu có giá trị khớp. Nếu không có bản ghi khớp từ bảng bên trái, các cột của bảng bên trái sẽ có giá trị NULL.

Cú pháp của RIGHT JOIN:

Customers

Kết quả:

OrderID Product CustomerName
101 Laptop John Smith
102 Smartphone Ana Williams
NULL NULL Maria Anders

Giải thích:

  • John SmithAna Williams có đơn hàng, nên thông tin đơn hàng của họ được hiển thị.
  • Maria Anders không có đơn hàng, nhưng do sử dụng RIGHT JOIN, tên của cô ấy vẫn xuất hiện trong kết quả, và giá trị của các cột OrderIDProduct sẽ là NULL.

So sánh RIGHT JOIN và LEFT JOIN:

  • LEFT JOIN trả về tất cả các hàng từ bảng bên trái và các giá trị khớp từ bảng bên phải.
  • RIGHT JOIN trả về tất cả các hàng từ bảng bên phải và các giá trị khớp từ bảng bên trái.

Ví dụ nâng cao với RIGHT JOIN:

Giả sử bạn có thêm một bảng Products và bạn muốn kết hợp dữ liệu từ các bảng này để liệt kê tất cả các sản phẩm đã được bán (nếu có), và tên của khách hàng đã mua chúng. Nếu một sản phẩm chưa được bán, nó vẫn sẽ xuất hiện trong kết quả với giá trị NULL cho cột khách hàng.

Bảng Products:

ProductID ProductName Price
1001 Laptop 800
1002 Smartphone 500
1003 Tablet 300
1004 Smartwatch 200

Truy vấn sử dụng RIGHT JOIN trên ba bảng để liệt kê tất cả sản phẩm và thông tin đơn hàng (nếu có):

Suppliers

Kết quả:

SupplierName ProductName Price TotalQuantity
Tech Supplies Laptop 800 5
Global Gadgets Smartphone 500 10
NULL Tablet 300 NULL
Infinity Goods Smartwatch 200 7

Giải thích:

  • Tech Supplies đã cung cấp sản phẩm Laptop, và tổng số lượng đặt hàng là 5.
  • Global Gadgets đã cung cấp Smartphone, và tổng số lượng đặt hàng là 10.
  • Infinity Goods cung cấp Smartwatch, với tổng số lượng đặt hàng là 7.
  • Tablet chưa được liên kết với nhà cung cấp nào (SupplierID là NULL) và cũng chưa có đơn hàng, do đó, cột SupplierNameTotalQuantityNULL.

Sử dụng RIGHT JOIN để tìm nhà cung cấp không có sản phẩm

Nếu bạn muốn liệt kê tất cả các nhà cung cấp, bao gồm cả những nhà cung cấp chưa có sản phẩm nào trong bảng Products, bạn có thể sử dụng RIGHT JOIN để đảm bảo lấy toàn bộ dữ liệu từ bảng Products và kết hợp với thông tin nhà cung cấp (nếu có).

SELECT Suppliers.SupplierName, Products.ProductName, Products.Price
FROM Suppliers
RIGHT JOIN Products ON Suppliers.SupplierID = Products.SupplierID;

Kết quả:

SupplierName ProductName Price
Tech Supplies Laptop 800
Global Gadgets Smartphone 500
NULL Tablet 300
Infinity Goods Smartwatch 200

Giải thích:

  • Tech Supplies cung cấp LaptopGlobal Gadgets cung cấp Smartphone.
  • Infinity Goods cung cấp Smartwatch.
  • Tablet không được cung cấp bởi nhà cung cấp nào (SupplierID là NULL), do đó cột SupplierNameNULL.

Ví dụ nâng cao với điều kiện lọc

Giả sử bạn muốn liệt kê tất cả các sản phẩm có giá lớn hơn 400 và thông tin về nhà cung cấp (nếu có). Bạn có thể kết hợp RIGHT JOIN với WHERE để lọc dữ liệu.

SELECT Suppliers.SupplierName, Products.ProductName, Products.Price
FROM Suppliers
RIGHT JOIN Products ON Suppliers.SupplierID = Products.SupplierID
WHERE Products.Price > 400;

Kết quả:

SupplierName ProductName Price
Tech Supplies Laptop 800
Global Gadgets Smartphone 500

Giải thích:

  • Kết quả chỉ liệt kê các sản phẩm có giá lớn hơn 400. TabletSmartwatch không xuất hiện vì giá của chúng nhỏ hơn 400.

Sử dụng RIGHT JOIN để kiểm tra sản phẩm không có nhà cung cấp

Bạn có thể sử dụng RIGHT JOIN để tìm ra các sản phẩm chưa có nhà cung cấp bằng cách lọc các bản ghi có giá trị NULL trong cột SupplierName.

SELECT Products.ProductName, Products.Price
FROM Suppliers
RIGHT JOIN Products ON Suppliers.SupplierID = Products.SupplierID
WHERE Suppliers.SupplierName IS NULL;

Kết quả:

ProductName Price
Tablet 300

Giải thích:

  • Truy vấn trả về các sản phẩm không có nhà cung cấp, trong trường hợp này là Tablet.

Khi nào nên sử dụng RIGHT JOIN?

  • Khi bạn muốn lấy toàn bộ dữ liệu từ bảng bên phải, và chỉ lấy các dữ liệu khớp từ bảng bên trái.
  • Khi bạn cần đảm bảo rằng không có dữ liệu nào từ bảng bên phải bị bỏ sót, ngay cả khi không có dữ liệu tương ứng từ bảng bên trái.

RIGHT JOIN rất hữu ích trong các trường hợp bạn cần ưu tiên bảng bên phải và muốn lấy tất cả dữ liệu từ bảng này, bất kể có bản ghi tương ứng trong bảng còn lại hay không.