Khái niệm JOIN trong SQL
Giống như tên của của nó, JOIN có nghĩa là kết hợp những thứ gì đó. Ở trong SQL thì JOIN là kết hợp nội dung của hai hay nhiều hơn các bảng dữ liệu.
SQL chuẩn ANSI đưa ra các loại JOIN sau:
- Inner JOIN
- Left outer JOIN
- Right outer JOIN
- Full outer JOIN
- Cross JOIN
Tại sao lại phải sử dụng JOIN trong SQL?
Khi bạn muốn truy cập hai hay nhiều bảng trong một lệnh SELECT.
Khi bạn muốn kết hợp dữ liệu của nhiều bảng thành một bảng và sau khi JOIN bạn có thể thao tác với các bảng đã JOIN như một bảng đơn.
Việc kết hợp hai hay nhiều bảng phụ thuộc vào trường dữ liệu chung giữa hai bảng.
Inner JOIN là kỹ thuật đơn giản và hay được sử dụng nhất trong SQL. Khi ta không nhắc gì đến loại của JOIN thì ta có thể coi đó là JOIN thông thường hoặc inner JOIN.
Cách sử dụng kỹ thuật JOIN (hay inner JOIN)
Xét ví dụ triển khai quá trình JOIN trong SQL, ta có hai bảng dữ liệu chứa các bản ghi của các nhân viên và bảng lương của họ trong một bộ phận.
Bảng “Nhan_vien”:
ID | Ten | Tuoi | Dia_chi | Tro_cap |
1 | Yen | 22 | Ha Noi | 200 |
2 | Hai | 32 | Ha Noi | 200 |
3 | Tran | 31 | Hai Phong | 200 |
4 | Van | 34 | Ha Noi | 200 |
5 | Tuyen | 20 | Hai Phong | 200 |
Bảng “Luong”:
ID | Ngay | Ma_nhan_vien | Luong |
202 | 27/08/2017 | 1 | 800 |
203 | 28/08/2017 | 2 | 900 |
302 | 27/08/2017 | 5 | 1500 |
Các bạn hãy xem kết quả của lệnh sau:
SELECT Ma_nhan_vien, Ten, Tuoi, Luong
FROM Nhan_vien n, Luong l
WHERE n.ID =l.Ma_nhan_vien;
Như bạn thấy ở hình trên, một bảng dữ liệu mới được tạo ra dựa trên dữ liệu của hai bảng “Nhan_vien” và “Luong”.
Câu lệnh trong ví dụ trên sẽ có chung kết quả với các câu lệnh sau:
SELECT Ma_nhan_vien, Ten, Tuoi, Luong
FROM Nhan_vien n INNER JOIN Luong l
WHERE n.ID =l.Ma_nhan_vien;
Hoặc
SELECT Ma_nhan_vien, Ten, Tuoi, Luong
FROM Nhan_vien n INNER JOIN Luong l
ON n.ID =l.Ma_nhan_vien;
Khái niệm outer JOIN trong SQL
Outer Join là cách dữ liệu của tất cả các bảng được kết hợp lại với nhau cho dù là chúng có điểm chung nào hay không.
Chú ý: Các khái niệm JOIN trong SQL chúng tôi không sử dụng những từ tiếng việt, bởi vì các khái niệm này có liên quan tới nội dung của các câu lệnh của chúng.
Xét hai bảng dữ liệu T1 và T2 lần lượt như sau:
T1C |
1 |
2 |
3 |
4 |
T2C |
3 |
4 |
5 |
6 |
Outer JOIN bao gồm các loại:
Full outer JOIN: Sẽ tạo ra sự hợp nhất nội dung của các bảng. Tức là nó sẽ tạo ra một bảng tạm mà chứa nội dung của tất cả các bảng được kết hợp.
Giả sử ta muốn full outer JOIN hai bảng dữ liệu T1 và T2 ở trên với câu lệnh:
SELECT * FROM T1 FULL OUTER JOIN T2 ON T1.T1C = T2.T2C
Kết quả thu được bởi câu lệnh trên là một bảng tạm có dạng như sau:
T1C | T2C |
1 | NULL |
2 | NULL |
3 | 3 |
4 | 4 |
NULL | 5 |
NULL | 6 |
Left outer JOIN (hay left JOIN): Sẽ trả về tất cả các bản ghi (các hàng) của bảng nằm bên trái phép JOIN (Ví dụ khi A <JOIN> B thì A là bảng nằm phía bên trái, và B là bảng nằm phía bên phải) và các giá trị trùng khớp của bảng bên phải. Nếu không có dữ liệu trùng khớp giữa hai bảng, khi đó giá trị NULL sẽ được trả về.
Right outer JOIN (hay right JOIN): Sẽ trả về tất cả các hàng của bảng nằm bên phải phép JOIN được kết hợp với các hàng trùng khớp của bảng bên trái. Nếu không có cột nào trùng khớp trong bảng bên trái. Kết quả trả về sẽ là giá trị NULL
Để tìm hiểu kĩ hơn về left JOIN và right JOIN bạn có thể tìm hiểu ở bài sau.