1. Mệnh đề FULL JOIN

Mệnh đề FULL JOIN  sẽ tạo ra kết quả bằng cách kết hợp kết quả của cả LEFT JOINRIGHT JOIN. Tập hợp kết quả sẽ chứa tất cả các bản ghi có trong cả hai bảng. Các giá trị NULL sẽ được trả về trong tập kết quả nếu như cả 2 bảng không có giá trị khớp nhau. Hình ảnh dưới đây minh họa mệnh đề FULL JOIN giữa 2 bảng với nhau:

Biểu đồ venn ở trên cho ta thấy mệnh đề FULL JOIN sẽ có tập giá trị là tất cả giá trị ở bảng 1 và tất cả giá trị ở bảng 2. Vì vậy mệnh đề này sẽ có thể trả về tập kết quả rất lớn!

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

SELECT table1.column1,table1.column2,table2.column1,....
FROM table1
FULL 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 FULL JOIN được gọi là FULL OUTER JOIN

2. Ví dụ FULL JOIN

Bảng dưới đây có tên là KhachHang bao gồm các cột đó là: KhachHang_ID,Ho,Ten,Tuoi bảng này sẽ trông 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
4 Chu Quang Huy 18

Bảng tiếp theo 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 dưới đây là bảng DatHang

MaDH SoLuong KhachHang_ID
1 123 3
2 345 3
3 567 2
4 789 1
5 111 10

Câu lệnh SQL dưới đây sẽ lấy ra tất cả tên (Ten) trong bảng KhachHang và mã đặt hàng (MaDH) trong bảng DatHang bằng mệnh đề FULL JOIN. Nếu như có những giá trị không khớp với nhau trong 2 bảng thì giá trị trả về sẽ là NULL.

SELECT DatHang.MaDH, KhachHang.Ten 
FROM DatHang 
FULL JOIN KhachHang 
ON DatHang.KhachHang_ID = KhachHang.KhachHang_ID;

Kết quả:

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

Chú ý: Mệnh đề FULL JOIN sẽ trả về tất cả các kết quả trong cả 2 bảng. Vì vậy các giá trị trong bảng DatHang không khớp với bảng KhachHang hay các giá trị trong bảng KhachHang không khớp với bảng DatHang thì kết quả vẫn được trả về là giá trị NULL.