FULL JOIN trong SQL
FULL JOIN trong SQL kết hợp kết quả của cả hai loại LEFT và RIGHT JOIN.
Bảng được kết hợp sẽ chứa tất cả bản ghi từ cả hai bảng, và điền vào đó giá trị NULL cho các giá trị không so khớp nhau.
Cú pháp
Cú pháp cơ bản của FULL JOIN trong SQL như sau:
SELECT bang1.cot1, bang2.cot2... FROM bang1 FULL JOIN bang2 ON bang1.field_chung = bang2.field_chung;
Ví dụ
Giả sử có hai bảng, bảng SINHVIEN có các bản ghi sau:
+----+---------+-----+-----------+--------+ | ID | TEN | TUOI| KHOAHOC | HOCPHI | +----+---------+-----+-----------+---------+ | 1 | Hoang | 21 | CNTT | 4000000 | | 2 | Viet | 19 | DTVT | 3000000 | | 3 | Thanh | 18 | KTDN | 4000000 | | 4 | Nhan | 19 | CK | 4500000 | | 5 | Huong | 20 | TCNH | 5000000 | +----+---------+-----+-----------+---------+
Bảng MUONSACH có các bản ghi sau:
+-----+---------------------+-------------+--------+ |STT | NGAY | SINHVIEN_ID | SOTIEN | +-----+---------------------+-------------+--------+ | 102 | 2009-10-08 00:00:00 | 3 | 320 | | 100 | 2009-10-08 00:00:00 | 3 | 250 | | 101 | 2009-11-20 00:00:00 | 2 | 280 | | 103 | 2008-05-20 00:00:00 | 4 | 290 | +-----+---------------------+-------------+--------+
Bây giờ, chúng ta kết hợp hai bảng bởi sử dụng FULL JOIN trong SQL như sau:
SQL> SELECT ID, TEN, SOTIEN, NGAY FROM SINHVIEN FULL JOIN MUONSACH ON SINHVIEN.ID = MUONSACH.SINHVIEN_ID;
Ví dụ trên sẽ cho kết quả:
+------+----------+--------+---------------------+ | ID | TEN | SOTIEN | NGAY | +------+----------+--------+---------------------+ | 1 | Hoang | NULL | NULL | | 2 | Viet | 280 | 2009-11-20 00:00:00 | | 3 | Thanh | 320 | 2009-10-08 00:00:00 | | 3 | Thanh | 250 | 2009-10-08 00:00:00 | | 4 | Nhan | 290 | 2008-05-20 00:00:00 | | 5 | Huong | NULL | NULL | | 3 | Thanh | 320 | 2009-10-08 00:00:00 | | 3 | Thanh | 250 | 2009-10-08 00:00:00 | | 2 | Viet | 280 | 2009-11-20 00:00:00 | | 4 | Nhan | 290 | 2008-05-20 00:00:00 | +------+----------+--------+---------------------+
Nếu Database của bạn không hỗ trợ FULL JOIN (chẳng hạn như MySQL), thì bạn có thể sử dụng mệnh đề UNION ALL để kết hợp hai JOIN như sau:
SQL> SELECT ID, TEN, SOTIEN, NGAY FROM SINHVIEN LEFT JOIN MUONSACH ON SINHVIEN.ID = MUONSACH.SINHVIEN_ID UNION ALL SELECT ID, TEN, SOTIEN, NGAY FROM SINHVIEN RIGHT JOIN MUONSACH ON SINHVIEN.ID = MUONSACH.SINHVIEN_ID