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 table1table2.

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_IDKhachHang.KhachHang_ID thì câu lệnh trên sẽ không trả về bất kỳ kết quả nào.