1. Mệnh đề LEFT JOIN

LEFT JOIN là dạng mệnh đề trong SQL thuộc kiểu JOIN. Mệnh đề LEFT JOIN sẽ trả về tất cả bản ghi bên phía bảng 1 hay còn gọi là bảng bên trái và những bản ghi phù hợp ở bảng 2 hay còn gọi là bảng bên phải. Nếu như trong mệnh đề ON không trùng với bản ghi nào ở bảng bên phải thì LEFT JOIN sẽ vẫn trả về kết quả cho bản ghi đó tuy nhiên kết quả này sẽ là NULL. Hình ảnh dưới đây minh họa mệnh đề LEFT JOIN giữa 2 bảng với nhau:

Nhận xét từ biểu đồ venn ở trên, ta thấy rằng mệnh đề LEFT JOIN sẽ là tất cả các giá trị có trong bảng 1 cộng với các giá trị giao giữa 2 bảng. Hay có thể hiểu rằng tất cả giá trị ở bảng 1 và các giá trị chung của cả 2 bảng.

Cú pháp của mệnh đề LEFT JOIN như sau:

SELECT table1.column1,table1.column2,table2.column1,....
FROM table1 
LEFT 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ú ý: Chúng ta cũng có thể sử dụng LEFT OUTER JOIN thay vì LEFT JOIN, hai cách gọi trên đều được hiểu giống nhau, tuy nhiên một số cơ sở dữ liệu sẽ gọi là LEFT OUTER JOIN.

2. Ví dụ LEFT 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ẽ trông như sau:

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
4 Chu Quang Huy 18

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 như bên dưới:

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 tất cả tên của khách hàng từ cột Ten của bảng KhachHang và lấy ra tất cả mã đặt hàng từ cột MaDH của bảng DatHang mà những khách hàng có thể có.

Nếu ở bảng bên trái KhachHang không có mã đặt hàng (MaDH) nào tồn tại ở bảng bên phải DatHang thì giá trị sẽ là NULL. Câu lệnh có sử dụng mệnh đề LEFT JOIN như sau:

SELECT KhachHang.Ten, DatHang.MaDH
FROM KhachHang
LEFT JOIN DatHang
ON KhachHang.KhachHang_ID=DatHang.KhachHang_ID
ORDER BY KhachHang.Ten;

Kết quả:

Ten MaDH
Minh Nam 4
Quang Huy NULL
Thái Sơn 1
Thái Sơn 2
Trí Thành 3

Chú ý: Các mệnh đề LEFT JOIN sẽ trả về tất cả các bản ghi từ bảng bên trái KhachHang, ngay cả khi không tìm thấy các giá trị chung ở cột KhachHang_ID ở bảng bên phải DatHang