Giới thiệu về JOIN
Câu lệnh JOIN sẽ gộp chung hai hoặc nhiều bảng với nhau, dựa trên một điều kiện liên kết giữa hai bảng đó.
Ở ví dụ sử dụng JOIN, chúng ta sẽ tạo hai bảng students và classes như sau:
|
|
INNER JOIN
Câu lệnh INNER JOIN sẽ lấy nội dung có điều kiện đúng với cả bảng 1 và bảng 2. Câu lệnh JOIN thường đi cùng với từ khóa ON như sau:
SELECT ... FROM <bảng 1> INNER JOIN <bảng 1> ON <điều kiện giữa hai bảng>
Tiếp theo chúng ta sẽ lấy tên học sinh cùng với tên lớp:
|
|
Kết quả sẽ là:
+------------------------+-------+------------+ | name | score | class_name | +------------------------+-------+------------+ | Nguyễn Ngọc Tuấn | 8.9 | 5A | | Phan Thanh Bình | 9.5 | 5B | | Châu Thị Thủy | 7.6 | 5A | | Ngô Nhật Minh | 7.8 | 5B | | Nguyễn Quang Vinh | 8.3 | 5A | +------------------------+-------+------------+
LEFT JOIN
Câu lệnh LEFT JOIN sẽ lấy tất cả các dữ liệu của bảng 1, trong trường hợp dữ liệu của bảng 2 không có đúng với điều kiện thì các field của bảng 2 lúc này sẽ lấy giá trị NULL.
Ví dụ sau chúng ta lấy hết nội dung trong bảng 1. Trong đó bảng 1 là bảng classes.
|
|
Kết quả sẽ là:
+------------+------------------------+-------+ | class_name | name | score | +------------+------------------------+-------+ | 5A | Nguyễn Quang Vinh | 8.3 | | 5A | Châu Thị Thủy | 7.6 | | 5A | Nguyễn Ngọc Tuấn | 8.9 | | 5B | Ngô Nhật Minh | 7.8 | | 5B | Phan Thanh Bình | 9.5 | | 5C | NULL | NULL | +------------+------------------------+-------+
RIGHT JOIN
Tương tự với RIGHT JOIN thì nội dung sẽ lấy hết ở bảng 2. Trong trường hợp dữ liệu của bảng 1 không có đúng với điều kiện thì các field của bảng 1 lúc này sẽ lấy giá trị NULL.
Ví dụ sau chúng ta lấy hết nội dung trong bảng 2. Trong đó bảng 2 là bảng classes.
|
|
Kết quả là:
+------------------------+-------+------------+ | name | score | class_name | +------------------------+-------+------------+ | Nguyễn Quang Vinh | 8.3 | 5A | | Châu Thị Thủy | 7.6 | 5A | | Nguyễn Ngọc Tuấn | 8.9 | 5A | | Ngô Nhật Minh | 7.8 | 5B | | Phan Thanh Bình | 9.5 | 5B | | NULL | NULL | 5C | +------------------------+-------+------------+
Lưu ý là SQLite không hổ trợ RIGHT JOIN.
FULL OUTER JOIN
FULL OUTER JOIN là kết hợp giữa LEFT JOIN và RIGHT JOIN. Nội dung sẽ lấy ở cả bảng 1 cùng với bảng 2, và sẽ điền các giá trị NULL vào các cột cần thiết.
Cả MySQL và SQLite đều không hổ trợ FULL OUTER JOIN, chỉ có PostgreSQL là hổ trợ kiểu JOIN này.