1. Mệnh đề RIGHT JOIN

Mệnh đề RIGHT JOIN sẽ trả về tất cả bản ghi bên phía bảng 2 hay còn gọi là bảng bên phải và những bản ghi phù hợp ở bảng 1 hay còn gọi là bảng bên trái. Nếu như trong mệnh đề ON không trùng với bản ghi nào ở bảng bên trái thì RIGHT JOIN sẽ vẫn trả về kết quả và kết quả đó sẽ là NULL. Hình ảnh dưới đây minh họa mệnh đề RIGHT JOIN giữa 2 bảng với nhau:

Từ biểu đồ venn ở trên, ta có thể hiểu rằng mệnh đề RIGHT JOIN sẽ là tất cả các giá trị có trong bảng 2 cộng với các giá trị giao giữa 2 bảng. Hay có thể hiểu rằng tất cả giá trị ở bảng 2 và các giá trị chung của cả 2 bảng.

Cú pháp của mệnh đề RIGHT JOIN như sau:

SELECT table1.column1,table1.column2,table2.column1,....
FROM table1 
RIGHT JOIN table2 
ON table1.matching_column = table2.matching_column;

Trong đó:

  • table1 là bảng đầu tiên
  • table2 là bảng thứ hai
  • matching_column là cột chung cho cả 2 bảng

Lưu ý: Trong một số cơ sở dữ liệu RIGHT JOIN được gọi RIGHT OUTER JOIN

2. Ví dụ RIGHT JOIN

Trong ví dụ đơn giản này, tôi sẽ sử dụng 2 bảng. Bảng đầu tiên trong ví dụ này sẽ có tên DatHang trong bảng này sẽ có các cột là: MaDH, SoLuong, KhachHang_ID như bên dưới:

MaDH SoLuong KhachHang_ID
1 123 3
2 345 3
3 567 2
4 789 1

Bảng tiếp theo này có tên bảng là KhachHang bao gồm các cột đó là: KhachHang_ID,Ho,Ten,Tuoi như bên dưới đây:

KhachHang_ID Ho Ten Tuoi
1 Chu Minh Nam 20
2 Nguyễn Trí Thành 19
3 Phùng Thái Sơn 20

Câu lệnh SQL dưới đây được sử dụng để lấy ra tất cả tên của khách hàng từ cột Ten của bảng KhachHang và lấy ra tất cả mã đặt hàng từ cột MaDH của bảng DatHang mà những khách hàng có thể có.

Nếu ở bảng bên phải KhachHang không có mã đặt hàng (MaDH) nào tồn tại ở bảng bên trái DatHang thì giá trị sẽ là NULL. Câu lệnh có sử dụng mệnh đề RIGHT JOIN như sau:

SELECT KhachHang.Ten, DatHang.MaDH
FROM DatHang
RIGHT JOIN KhachHang
ON KhachHang.KhachHang_ID=DatHang.KhachHang_ID
ORDER BY KhachHang.Ten;

Kết quả:

Ten MaDH
4 Minh Nam
NULL Quang Huy
1 Thái Sơn
2 Thái Sơn
3 Trí Thành

Chú ý: Các mệnh đề RIGHT JOIN sẽ trả về tất cả các bản ghi từ bảng bên phải KhachHang, ngay cả khi không tìm thấy các giá trị chung ở cột KhachHang_ID ở bảng bên trái DatHang