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.