Khoá học: Thiết lập dự án Wordpress

Nếu bạn đang tìm kiếm một cách nhanh chóng và hiệu quả để thiết lập một trang web cá nhân hoặc doanh nghiệp của mình, hãy bắt đầu với WordPress. Được coi là nền tảng quản lý nội dung (CMS) phổ biến nhất trên thế giới, WordPress cho phép bạn dễ dàng tạo ra một [...]

MySQL Bài 40: Tìm hiểu LEFT JOIN trong MySQL

– Trong hệ quản trị cơ sở dữ liệu MySQL, lệnh LEFT JOIN được dùng để kết hợp các hàng từ hai cái bảng lại thành một cái bảng tổng hợp.

– Trong đó, việc kết hợp các hàng sẽ được thực hiện dựa trên nguyên tắc như sau:

  • Tất cả các hàng bên trong cái bảng thứ nhất (table1) sẽ được bắt cặp lần lượt với tất cả các hàng bên trong cái bảng thứ hai (table2)
  • Những hàng mà dữ liệu trên nó thỏa điều kiện (condition) thì sẽ được giữ lại, còn những hàng mà dữ liệu trên nó không thỏa điều kiện thì sẽ bị loại bỏ.
  • Đối với những hàng trong cái bảng thứ nhất (table1) không bắt cặp được với bất kỳ hàng nào bên trong cái bảng thứ hai (table2) mà thỏa điều kiện thì nó sẽ được ghép với một hàng chứa toàn giá trị NULL.
SELECT *
FROM table1
LEFT JOIN table2
ON condition;
table1
table2

Lưu ý: Khi hai cái bảng được kết hợp với nhau, các hàng trong cái bảng thứ nhất (table1) sẽ được đặt bên trái, các hàng trong cái bảng thứ hai (table2) sẽ được ghép bên phải.

MỘT SỐ VÍ DỤ THAM KHẢO

– Trong bài học này, tôi sẽ sử dụng hai cái bảng Customers & Orders như bên dưới để làm một số ví dụ minh họa.

CustomerIDCustomerNameCity
1Nguyễn Thành NhânCần Thơ
2Hoàng Nghĩa TuyếnVĩnh Long
3Trần Nguyễn Anh ThưHậu Giang
4Đinh Nguyên DươngTrà Vinh
OrderIDOrderDateCustomerIDTotal
12019-02-074180000
22019-02-181140000
32019-03-117280000
42019-04-223235000
52019-06-134220000
Ví dụ 1:
SELECT *
FROM Customers
LEFT JOIN Orders
ON Total > 230000
ORDER BY Customers.CustomerID ASC, OrderID ASC;

– Sau khi thực thi câu lệnh phía trên thì tôi sẽ lấy được một bảng dữ liệu như sau.

CustomerIDCustomerNameCityOrderIDOrderDateCustomerIDTotal
1Nguyễn Thành NhânCần Thơ32019-03-117280000
1Nguyễn Thành NhânCần Thơ42019-04-223235000
2Hoàng Nghĩa TuyếnVĩnh Long32019-03-117280000
2Hoàng Nghĩa TuyếnVĩnh Long42019-04-223235000
3Trần Nguyễn Anh ThưHậu Giang32019-03-117280000
3Trần Nguyễn Anh ThưHậu Giang42019-04-223235000
4Đinh Nguyên DươngTrà Vinh32019-03-117280000
4Đinh Nguyên DươngTrà Vinh42019-04-223235000
XEM GIẢI THÍCH
Ví dụ 2:
SELECT *
FROM Customers
LEFT JOIN Orders
ON Total > 500000
ORDER BY Customers.CustomerID ASC, OrderID ASC;

– Sau khi thực thi câu lệnh phía trên thì tôi sẽ lấy được một bảng dữ liệu như sau.

CustomerIDCustomerNameCityOrderIDOrderDateCustomerIDTotal
1Nguyễn Thành NhânCần ThơNULLNULLNULLNULL
2Hoàng Nghĩa TuyếnVĩnh LongNULLNULLNULLNULL
3Trần Nguyễn Anh ThưHậu GiangNULLNULLNULLNULL
4Đinh Nguyên DươngTrà VinhNULLNULLNULLNULL
XEM GIẢI THÍCH
Ví dụ 3:
SELECT Customers.CustomerID, CustomerName, City, OrderID, OrderDate, Total
FROM Customers
LEFT JOIN Orders
ON Customers.CustomerID = Orders.CustomerID
ORDER BY Customers.CustomerID ASC, OrderID ASC;

– Sau khi thực thi câu lệnh phía trên thì tôi sẽ lấy được một bảng dữ liệu như sau.

CustomerIDCustomerNameCityOrderIDOrderDateTotal
1Nguyễn Thành NhânCần Thơ22019-02-18140000
2Hoàng Nghĩa TuyếnVĩnh LongNULLNULLNULL
3Trần Nguyễn Anh ThưHậu Giang42019-04-22235000
4Đinh Nguyên DươngTrà Vinh12019-02-07180000
4Đinh Nguyên DươngTrà Vinh52019-06-13220000
XEM GIẢI THÍCH

GIẢI THÍCH VÍ DỤ 1

CustomerIDCustomerNameCity
1Nguyễn Thành NhânCần Thơ
2Hoàng Nghĩa TuyếnVĩnh Long
3Trần Nguyễn Anh ThưHậu Giang
4Đinh Nguyên DươngTrà Vinh
OrderIDOrderDateCustomerIDTotal
12019-02-074180000
22019-02-181140000
32019-03-117280000
42019-04-223235000
52019-06-134220000
SELECT *
FROM Customers
LEFT JOIN Orders
ON Total > 230000
ORDER BY Customers.CustomerID ASC, OrderID ASC;

– Tất cả các hàng bên trong cái bảng thứ nhất (Customers) sẽ được bắt cặp lần lượt với tất cả các hàng bên trong cái bảng thứ hai (Orders)

CustomerIDCustomerNameCityOrderIDOrderDateCustomerIDTotal
1Nguyễn Thành NhânCần Thơ12019-02-074180000
1Nguyễn Thành NhânCần Thơ22019-02-181140000
1Nguyễn Thành NhânCần Thơ32019-03-117280000
1Nguyễn Thành NhânCần Thơ42019-04-223235000
1Nguyễn Thành NhânCần Thơ52019-06-134220000
2Hoàng Nghĩa TuyếnVĩnh Long12019-02-074180000
2Hoàng Nghĩa TuyếnVĩnh Long22019-02-181140000
2Hoàng Nghĩa TuyếnVĩnh Long32019-03-117280000
2Hoàng Nghĩa TuyếnVĩnh Long42019-04-223235000
2Hoàng Nghĩa TuyếnVĩnh Long52019-06-134220000
3Trần Nguyễn Anh ThưHậu Giang12019-02-074180000
3Trần Nguyễn Anh ThưHậu Giang22019-02-181140000
3Trần Nguyễn Anh ThưHậu Giang32019-03-117280000
3Trần Nguyễn Anh ThưHậu Giang42019-04-223235000
3Trần Nguyễn Anh ThưHậu Giang52019-06-134220000
4Đinh Nguyên DươngTrà Vinh12019-02-074180000
4Đinh Nguyên DươngTrà Vinh22019-02-181140000
4Đinh Nguyên DươngTrà Vinh32019-03-117280000
4Đinh Nguyên DươngTrà Vinh42019-04-223235000
4Đinh Nguyên DươngTrà Vinh52019-06-134220000

– Những hàng nào thỏa điều kiện Total > 230000 thì được giữ lại, còn những hàng không thỏa điều kiện thì bị loại bỏ.

CustomerIDCustomerNameCityOrderIDOrderDateCustomerIDTotal
1Nguyễn Thành NhânCần Thơ32019-03-117280000
1Nguyễn Thành NhânCần Thơ42019-04-223235000
2Hoàng Nghĩa TuyếnVĩnh Long32019-03-117280000
2Hoàng Nghĩa TuyếnVĩnh Long42019-04-223235000
3Trần Nguyễn Anh ThưHậu Giang32019-03-117280000
3Trần Nguyễn Anh ThưHậu Giang42019-04-223235000
4Đinh Nguyên DươngTrà Vinh32019-03-117280000
4Đinh Nguyên DươngTrà Vinh42019-04-223235000

GIẢI THÍCH VÍ DỤ 2

CustomerIDCustomerNameCity
1Nguyễn Thành NhânCần Thơ
2Hoàng Nghĩa TuyếnVĩnh Long
3Trần Nguyễn Anh ThưHậu Giang
4Đinh Nguyên DươngTrà Vinh
OrderIDOrderDateCustomerIDTotal
12019-02-074180000
22019-02-181140000
32019-03-117280000
42019-04-223235000
52019-06-134220000
SELECT *
FROM Customers
LEFT JOIN Orders
ON Total > 500000
ORDER BY Customers.CustomerID ASC, OrderID ASC;

– Tất cả các hàng bên trong cái bảng thứ nhất (Customers) sẽ được bắt cặp lần lượt với tất cả các hàng bên trong cái bảng thứ hai (Orders)

CustomerIDCustomerNameCityOrderIDOrderDateCustomerIDTotal
1Nguyễn Thành NhânCần Thơ12019-02-074180000
1Nguyễn Thành NhânCần Thơ22019-02-181140000
1Nguyễn Thành NhânCần Thơ32019-03-117280000
1Nguyễn Thành NhânCần Thơ42019-04-223235000
1Nguyễn Thành NhânCần Thơ52019-06-134220000
2Hoàng Nghĩa TuyếnVĩnh Long12019-02-074180000
2Hoàng Nghĩa TuyếnVĩnh Long22019-02-181140000
2Hoàng Nghĩa TuyếnVĩnh Long32019-03-117280000
2Hoàng Nghĩa TuyếnVĩnh Long42019-04-223235000
2Hoàng Nghĩa TuyếnVĩnh Long52019-06-134220000
3Trần Nguyễn Anh ThưHậu Giang12019-02-074180000
3Trần Nguyễn Anh ThưHậu Giang22019-02-181140000
3Trần Nguyễn Anh ThưHậu Giang32019-03-117280000
3Trần Nguyễn Anh ThưHậu Giang42019-04-223235000
3Trần Nguyễn Anh ThưHậu Giang52019-06-134220000
4Đinh Nguyên DươngTrà Vinh12019-02-074180000
4Đinh Nguyên DươngTrà Vinh22019-02-181140000
4Đinh Nguyên DươngTrà Vinh32019-03-117280000
4Đinh Nguyên DươngTrà Vinh42019-04-223235000
4Đinh Nguyên DươngTrà Vinh52019-06-134220000

– Những hàng nào thỏa điều kiện Total > 500000 thì được giữ lại, còn những hàng không thỏa điều kiện thì bị loại bỏ (trong cái bảng phía trên không có bất kỳ hàng nào thỏa điều kiện, cho nên tất cả đều bị loại bỏ)

CustomerIDCustomerNameCityOrderIDOrderDateCustomerIDTotal

– Trong cái bảng Customers, cả bốn hàng đều không bắt cặp được với bất kỳ hàng nào trong bảng Orders thỏa điều kiện, cho nên mỗi hàng sẽ được ghép với một hàng chứa toàn giá trị NULL.

CustomerIDCustomerNameCityOrderIDOrderDateCustomerIDTotal
1Nguyễn Thành NhânCần ThơNULLNULLNULLNULL
2Hoàng Nghĩa TuyếnVĩnh LongNULLNULLNULLNULL
3Trần Nguyễn Anh ThưHậu GiangNULLNULLNULLNULL
4Đinh Nguyên DươngTrà VinhNULLNULLNULLNULL

GIẢI THÍCH VÍ DỤ 3

CustomerIDCustomerNameCity
1Nguyễn Thành NhânCần Thơ
2Hoàng Nghĩa TuyếnVĩnh Long
3Trần Nguyễn Anh ThưHậu Giang
4Đinh Nguyên DươngTrà Vinh
OrderIDOrderDateCustomerIDTotal
12019-02-074180000
22019-02-181140000
32019-03-117280000
42019-04-223235000
52019-06-134220000
SELECT Customers.CustomerID, CustomerName, City, OrderID, OrderDate, Total
FROM Customers
LEFT JOIN Orders
ON Customers.CustomerID = Orders.CustomerID
ORDER BY Customers.CustomerID ASC, OrderID ASC;

– Tất cả các hàng bên trong cái bảng thứ nhất (Customers) sẽ được bắt cặp lần lượt với tất cả các hàng bên trong cái bảng thứ hai (Orders)

CustomerIDCustomerNameCityOrderIDOrderDateCustomerIDTotal
1Nguyễn Thành NhânCần Thơ12019-02-074180000
1Nguyễn Thành NhânCần Thơ22019-02-181140000
1Nguyễn Thành NhânCần Thơ32019-03-117280000
1Nguyễn Thành NhânCần Thơ42019-04-223235000
1Nguyễn Thành NhânCần Thơ52019-06-134220000
2Hoàng Nghĩa TuyếnVĩnh Long12019-02-074180000
2Hoàng Nghĩa TuyếnVĩnh Long22019-02-181140000
2Hoàng Nghĩa TuyếnVĩnh Long32019-03-117280000
2Hoàng Nghĩa TuyếnVĩnh Long42019-04-223235000
2Hoàng Nghĩa TuyếnVĩnh Long52019-06-134220000
3Trần Nguyễn Anh ThưHậu Giang12019-02-074180000
3Trần Nguyễn Anh ThưHậu Giang22019-02-181140000
3Trần Nguyễn Anh ThưHậu Giang32019-03-117280000
3Trần Nguyễn Anh ThưHậu Giang42019-04-223235000
3Trần Nguyễn Anh ThưHậu Giang52019-06-134220000
4Đinh Nguyên DươngTrà Vinh12019-02-074180000
4Đinh Nguyên DươngTrà Vinh22019-02-181140000
4Đinh Nguyên DươngTrà Vinh32019-03-117280000
4Đinh Nguyên DươngTrà Vinh42019-04-223235000
4Đinh Nguyên DươngTrà Vinh52019-06-134220000

– Những hàng nào thỏa điều kiện Customers.CustomerID = Orders.CustomerID thì được giữ lại, còn những hàng không thỏa điều kiện thì bị loại bỏ.

CustomerIDCustomerNameCityOrderIDOrderDateCustomerIDTotal
1Nguyễn Thành NhânCần Thơ22019-02-181140000
3Trần Nguyễn Anh ThưHậu Giang42019-04-223235000
4Đinh Nguyên DươngTrà Vinh12019-02-074180000
4Đinh Nguyên DươngTrà Vinh52019-06-134220000

– Trong cái bảng Customers, hàng có CustomerID là 2 không bắt cặp được với bất kỳ hàng nào trong bảng Orders thỏa điều kiện, cho nên nó sẽ được ghép với một hàng chứa toàn giá trị NULL.

CustomerIDCustomerNameCityOrderIDOrderDateCustomerIDTotal
1Nguyễn Thành NhânCần Thơ22019-02-181140000
2Hoàng Nghĩa TuyếnVĩnh LongNULLNULLNULLNULL
3Trần Nguyễn Anh ThưHậu Giang42019-04-223235000
4Đinh Nguyên DươngTrà Vinh12019-02-074180000
4Đinh Nguyên DươngTrà Vinh52019-06-134220000

– Ngoài ra, bởi vì lệnh SELECT chỉ lấy sáu cột Customers.CustomerID CustomerName City OrderID OrderDate Total cho nên cột CustomerID từ bảng Orders sẽ bị loại bỏ khỏi bảng kết hợp phía trên.

CustomerIDCustomerNameCityOrderIDOrderDateTotal
1Nguyễn Thành NhânCần Thơ22019-02-18140000
2Hoàng Nghĩa TuyếnVĩnh LongNULLNULLNULL
3Trần Nguyễn Anh ThưHậu Giang42019-04-22235000
4Đinh Nguyên DươngTrà Vinh12019-02-07180000
4Đinh Nguyên DươngTrà Vinh52019-06-13220000

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *