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 đề INNERJOIN, 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:

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 customersorders, nằm trong một cơ sở dữ liệu mẫu.

mySQL table

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

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
bảng customer

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, customerspayments:

mySQL table customer

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:

sử dụng left join mySQL

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 ordersorderDetails. Truy vấn này trả về sản phẩm của đơn hàng có mã số orderNumber 10123.

order number MySQL

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:

kết quả MySQL ordernumber

Lưu ý rằng nếu sử dụng mệnh đề INNER JOIN, điều kiện ONWHERE 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!

Hãy đánh giá bài viết post

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:


Thiết kế website

Rate this post

Bình luận