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 JOIN và RIGHT 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.