1. Mệnh đề INNER JOIN
Một mệnh đề INNER JOIN được sử dụng để chọn ra tất cả các bản ghi thỏa mãn điều kiện chung giữa 2 hay nhiều bảng. Điều kiện chung thường được sử dụng đó là khóa ngoại liên kết giữa 2 hay nhiều bảng. Hình ảnh dưới đây minh họa mệnh đề INNER JOIN giữa 2 bảng với nhau:
Việc minh họa INNER JOIN bằng biểu đồ venn cho ta thấy kết quả của mệnh đề INNER JOIN sẽ là các giá trị giao giữa 2 bảng. Hay có thể hiểu rằng các giá trị trả về sẽ đều đồng thời nằm trong cả 2 bảng table1 và table2.
Cú pháp của mệnh đề INNER JOIN như sau:
SELECT table1.column1,table1.column2,table2.column1,.... FROM table1 INNER 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
Chú ý: Mọi câu lệnh truy vấn có mệnh đề INNER JOIN cần phải có từ khóa ON và kèm theo điều kiện ở phía sau!
2. Ví dụ INNER JOIN
Trong ví dụ đơn giản này, tôi sẽ sử dụng 2 bảng. Bảng đầu tiên có tên bảng là KhachHang bao gồm các cột đó là: KhachHang_ID,Ho,Ten,Tuoi bảng này sẽ 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 |
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 bên dưới đây là bảng DatHang
MaDH | SoLuong | KhachHang_ID |
1 | 123 | 3 |
2 | 345 | 3 |
3 | 567 | 2 |
4 | 789 | 1 |
Câu lệnh SQL dưới đây sẽ được sử dụng để lấy ra MaDH trong bảng DatHang và lấy ra Ten trong bảng KhachHang thông qua mệnh đề INNER JOIN dựa trên cột KhachHang_ID có chung trong cả 2 bảng.
SELECT DatHang.MaDH, KhachHang.Ten FROM DatHang INNER 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 |
Lưu ý:Mệnh đề INNER JOIN sẽ chọn tất cả các bản ghi miễn là có sự trùng khớp giá trị giữa các cột từ cả hai bảng. Nếu không có giá trị nào được trùng khớp trong 2 cột DatHang.KhachHang_ID và KhachHang.KhachHang_ID thì câu lệnh trên sẽ không trả về bất kỳ kết quả nào.