Hướng dẫn cách sử dụng LEFT JOIN MySQL | Việt Nét
Trong bài viết này, Việt Nét sẽ giúp bạn tìm hiểu về mệnh đề LEFT JOIN MySQL và cách áp dụng để truy vấn dữ liệu từ hai hoặc nhiều bảng.
Giới thiệu về mệnh đề LEFT JOIN MySQL
Mệnh đề MySQL LEFT JOIN cho phép người dùng truy vấn dữ liệu từ hai hoặc nhiều bản. Tương tự như các mệnh đề INNER và JOIN, LEFT JOIN là mệnh đề tụy chọn của câu lệnh SELECT xuất hiện sau mệnh đề FROM.
Bây giờ giả sử rằng bạn muốn nối hai bảng t1 và t2.
Lệnh dưới đây sẽ sử dụng mệnh đề LEFT JOIN MySQL để nối hai bảng đó.
SELECT
select_list
FROM
t1
LEFT JOIN t2 ON
join_condition;
Khi sử dụnh mệnh đề LEFT JOIN, ta cần hiểu được đâu là bảng bên trái (left table) và đâu là bảng bên phải (right table). Trong đoạn lệnh trên, t1 được xem là bảng trái, và bảng bên phải được định là t2.
Mệnh đề LEFT JOIN chọn dữ liệu bắt đầu từ bảng bên trái (t1). Sau đó sẽ khớp với từng dòng ở bảng trái với từng dòng ở bảng bên phải (t2) dựa trên điều kiện join_condition.
Nếu join_condition trả về True sau khi khớp tất cả các hàng từ hai bảng, mệnh đề LEFT JOIN sẽ kết hợp các cột của hàng trong hai bảng thành một hàng mới. Sau đó hàng mới này sẽ được thêm vào kết quả.
Trong trường hợp bảng trái (t1) không khớp với bất kỳ hàng nào của bảng phải (t2), LEFT JOIN vẫn sẽ kết hợp các cột của hàng trong hai bảng và tạo thành một hàng mới trong kết quả. Tuy nhiên, tất cả các cột của hàng trong bảng bên phải sẽ nhận giá trị NULL.
Nói một cách khác, LEFT JOIN trả về tất cả các hàng từ bảng trái mà không cần biết hàng của bảng trái có khớp với hàng của bảng phải hay không. Nếu không có giá trị nào khớp, các cột của hàng trong bảng phải sẽ nhận giá trị NULL.
Dưới đây là biểu đồ Venn để giúp bạn dễ hình dung hơn về cách hoạt động của mệnh đồ LEFT JOIN MySQL:

Sử dụng mệnh đề LEFT JOIN MySQL để nối hai bảng
Bây giờ hãy xét một ví dụ sử dụng mệnh đề LEFT JOIN MySQL. Dưới đây là hai bảng có tên customers và orders, nằm trong một cơ sở dữ liệu mẫu.

Mỗi khách hàng trong bảng customers đều có thể có 0 hoặc nhiều đơn hàng trong bảng orders tương ứng. Tuy nhiên, mỗi đơn hàng phải thuộc về một khách hàng.
Truy vấn dưới đây sử dụng mệnh đề LEFT JOIN để tìm tất cả khách hàng và đơn hàng của họ:
SELECT
customers.customerNumber,
customerName,
orderNumber,
status
FROM
customers
LEFT JOIN orders ON
orders.customerNumber = customers.customerNumber;
Hoặc bạn cũng có thể sử dụng các alias để ngắn gọn hơn:

SELECT
c.customerNumber,
customerName,
orderNumber,
status
FROM
customers c
LEFT JOIN orders o
ON c.customerNumber = o.customerNumber;
Trong ví dụ này:
- Các khách hàng nằm ở bảng trái, còn đơn hàng sẽ nằm ở bảng phải.
- Mệnh đề LEFT JOIN trả về tất cả khách hàng, bao gồm cả những khách hàng không có đơn hàng nào. Những khách hàng như vậy sẽ nhận giá trị NULL trong các cột orderNumber và status.
Cả hai bảng đều có cùng một cột tên customerNumber, bạn có thể sử dụng cú pháp USING như sau:
SELECT
customerNumber,
customerName,
orderNumber,
status
FROM
customers
LEFT JOIN orders USING (customerNumber);
# or:
USING (customerNumber)
# or:
ON c.customerNumber = o.customerNumber

Nếu bạn thay thế mệnh đề LEFT JOIN bằng INNER JOIN, kết quả trả về sẽ là những khách hàng có ít nhất một đơn hàng.
Sử dụng mệnh đề LEFT JOIN MySQL để tìm các hàng chưa khớp
Mệnh đều LEFT JOIN MySQL rất hưuũ ích nếu bạn muốn tìm các hàng trong bảng không có hàng tương ứng trong bảng khác.
Trong ví dụ dưới đây, Việt Nét sử dụng mệnh đề LEFT JOIN để tìm những khách hàng không có đơn hàng:
SELECT
c.customerNumber,
c.customerName,
o.orderNumber,
o.status
FROM
customers c
LEFT JOIN orders o
ON c.customerNumber = o.customerNumber
WHERE
orderNumber IS NULL;
Sử dụng LEFT JOIN MySQL để liên kết ba bảng
Bên cạnh việc liên kết hai bảng với nhau, ta cũng hoàn toàn có thể sử dụng LEFT JOIN MySQL để liên kết ba bảng. Trong ví dụ dưới đây, ba bảng có tên lên lượt là employees, customers và payments:

Ví dụ này sử dụng hai mệnh đều LEFT JOIN để liên kết ba bảng với nhau:
SELECT
lastName,
firstName,
customerName,
checkNumber,
amount
FROM
employees
LEFT JOIN customers ON
employeeNumber = salesRepEmployeeNumber
LEFT JOIN payments ON
payments.customerNumber = customers.customerNumber
ORDER BY
customerName,
checkNumber;
Ta sẽ có được kết quả như hình dưới đây:

Vậy mệnh đề LEFT JOIN MySQL hoạt động như thế nào để liên kết ba bảng:
- Trước hết, mệnh đề LEFT JOIN đầu tiên trả về những nhân viên và khách hàng đại diện cho từng nhân viên, hoặc nhận giá trị NULL nếu nhân viên đó không phụ trách bất kỳ khách hàng nào.
- Mệnh đề LEFT JOIN thứ hai sẽ trả về các khoản thanh toán của từng khách hàng, đại diện bởi một nhân viên tương ứng. Ngược lại, giá trị trả về sẽ là NULL nếu khách hàng đó không thực hiện thanh toán.
Điều kiện trong mệnh đề WHERE so với mệnh đề ON
Trước tiên hãy xét ví dụ sau:
SELECT
o.orderNumber,
customerNumber,
productCode
FROM
orders o
LEFT JOIN orderDetails
USING (orderNumber)
WHERE
orderNumber = 10123;
Ví dụ này sử dụng mệnh đều LEFT JOIN MySQL để truy vấn dữ liệu trong bảng orders và orderDetails. Truy vấn này trả về sản phẩm của đơn hàng có mã số orderNumber 10123.

Bây giờ hãy thử thay đổi điều kiện từ mệnh đề WHERE sang mệnh đề ON:
SELECT
o.orderNumber,
customerNumber,
productCode
FROM
orders o
LEFT JOIN orderDetails d
ON o.orderNumber = d.orderNumber AND
o.orderNumber = 10123;
Khi đó kết quả trả về sẽ hoàn toàn khác. Cụ thể, truy vấn lúc này trả về tất cả đơn hàng nhưng chỉ những đơn hàng có mã 10123 mới có thông tin về sản phẩm, được minh họa như hình bên dưới đây:

Lưu ý rằng nếu sử dụng mệnh đề INNER JOIN, điều kiện ON và WHERE sẽ trả về kết quả như nhau.
Việt Nét vừa chia sẻ cách sử dụng left join MySQL, hy vọng bài viết này cung cấp cho bạn nhiều kiến thức mới và bổ ích, chúc bạn thành công!
Ngoài ra, khi sử dụng dịch vụ VPS và Hosting, quý khách sẽ được tặng bộ Theme & Plugin WordPress bản quyền trị giá đến 800$/năm. Đăng ký dùng thử ngay và Việt Nét sẽ hoàn tiền 100% nếu quý khách không hài lòng với chất lượng sản phẩm, dịch vụ! Nếu bạn có thắc mắc hay có vấn đề cần hỗ trợ, bạn có thể liên hệ trực tiếp với Việt Nét thông qua các kênh sau: