trừu tượng: Trong hướng dẫn này, bạn sẽ tìm hiểu về mệnh đề LEFT JOIN của MySQL và cách áp dụng nó để truy vấn dữ liệu từ hai bảng trở lên.
Bạn đang xem: Từ khóa SQL LEFT JOIN
Giới thiệu mệnh đề LEFT JOIN của MySQL
THAM GIA TRÁI cho phép bạn truy vấn dữ liệu từ hai hoặc nhiều bảng. Giống như mệnh đề nối bên trong, nối trái là mệnh đề tùy chọn của câu lệnh SELECT, xuất hiện ngay sau mệnh đề TỪ.
Giả sử bạn muốn nối hai bảng t1 và t2.
Câu lệnh sau đây cho biết cách sử dụng mệnh đề LEFT JOIN để nối hai bảng:
CHỌN select_list TỪ t1 t1 TRÁI THAM GIA t2 TRÊN điều kiện tham gia;
Ngôn ngữ mã: SQL (Ngôn ngữ truy vấn có cấu trúc) (SQL) Các khái niệm về bảng bên trái và bảng bên phải được giới thiệu khi bạn sử dụng mệnh đề LEFT JOIN.
Trong cú pháp trên, t1 là bảng bên trái và t2 là bảng bên phải.
Mệnh đề LEFT JOIN chọn dữ liệu bắt đầu từ bảng bên trái (t1). Nó khớp từng hàng của bảng bên trái (t1) với từng hàng của bảng bên phải (t2) dựa trên điều kiện tham gia.
Nếu các hàng từ cả hai bảng làm cho điều kiện nối là đúng, phép nối bên trái sẽ kết hợp các cột của các hàng từ cả hai bảng thành một hàng mới và thêm hàng mới đó vào các hàng kết quả.
Nếu một hàng trong bảng bên trái (t1) không khớp với bất kỳ hàng nào trong bảng bên phải (t2), phép nối bên trái vẫn nối các cột của các hàng từ cả hai bảng thành một hàng mới và hàng mới vào các hàng kết quả. Tuy nhiên, nó sử dụng NULL cho tất cả các cột trong hàng từ bảng bên phải.
Nói cách khác, LEFT JOIN trả về tất cả các hàng từ bảng bên trái bất kể hàng trong bảng bên trái có khớp với hàng trong bảng bên phải hay không.
Nếu không khớp, các cột hàng từ bảng bên phải sẽ chứa NULL.
Sơ đồ Venn sau đây giúp bạn hình dung cách thức hoạt động của mệnh đề nối trái:

MySQL TRÁI THAM GIA – Sơ đồ Venn
Ví dụ về mệnh đề LEFT JOIN của MySQL
Hãy lấy một số ví dụ về việc sử dụng mệnh đề nối trái.
1) Sử dụng mệnh đề LEFT JOIN của MySQL để nối hai bảng
Hãy xem các bảng sau đây Khách hàng và Đơn hàng trong cơ sở dữ liệu mẫu.
Xem thêm: Năm không nhuận có bao nhiêu ngày, Năm không nhuận có bao nhiêu ngày?

Mỗi khách hàng có thể có 0 đơn hàng hoặc nhiều đơn hàng nhưng mỗi đơn hàng phải thuộc về một khách hàng.
Truy vấn này sử dụng mệnh đề LEFT JOIN để tìm tất cả khách hàng và đơn đặt hàng của họ:
CHỌN khách hàng.customerNumber, customers.customerNumber, customersname, orderNumber, trạng thái TỪ khách hàng THAM GIA BÊN TRÁI TRÊN order.customerNumber = customers.customerNumber;
Ngôn ngữ mã: SQL (Ngôn ngữ truy vấn có cấu trúc) (sql) Ngoài ra, bạn có thể tiết kiệm một số thao tác nhập bằng cách sử dụng bí danh bảng:
CHỌN c.customerNumber, customerName, orderNumber, status TỪ khe khách hàng THAM GIA đơn hàng o BẬT c.customerNumber = o.customerNumber;
Ngôn ngữ mã: SQL (Ngôn ngữ truy vấn có cấu trúc) (sql)

Trong ví dụ này: Khách hàng là bảng bên trái và Đơn hàng là bảng bên phải. Mệnh đề LEFT JOIN trả về tất cả các khách hàng, kể cả những khách hàng không có đơn đặt hàng. Nếu một khách hàng không có đơn đặt hàng, các giá trị OrderNumber và Status của cột là NULL.
Vì cả bảng Khách hàng và Đơn hàng đều có tên cột (số khách hàng) trong điều kiện nối với toán tử bằng, nên bạn có thể sử dụng cú pháp sử dụng như sau:
Mã số khách hàng, tên khách hàng, mã số đơn hàng, trạng thái từ bên trái khách hàng tham gia đặt hàng đang sử dụng (mã số khách hàng);
Ngôn ngữ mã: SQL (Ngôn ngữ truy vấn có cấu trúc) (sql) Các mệnh đề sau là tương đương:
Sử dụng (Số khách hàng)
Ngôn ngữ mã: SQL (Ngôn ngữ truy vấn có cấu trúc) (sql) và
BẬT c.customerNumber = o.customerNumber
Ngôn ngữ mã: SQL (Ngôn ngữ truy vấn có cấu trúc) (sql) Nếu bạn thay thế mệnh đề LEFT JOIN bằng mệnh đề INNER THAM GIA, bạn sẽ chỉ tìm thấy những khách hàng có ít nhất một đơn đặt hàng.
2) Sử dụng mệnh đề LEFT JOIN của MySQL để tìm các hàng duy nhất
Mệnh đề LEFT JOIN rất hữu ích khi bạn muốn tìm các hàng trong một bảng không có hàng phù hợp trong một bảng khác.
Ví dụ sau sử dụng LEFTJOIN để tìm người dùng không có đơn đặt hàng:
CHỌN c.customerNumber, c.customerName, o.orderNumber, o.statusFROM khách hàng CLEFT THAM GIA đơn đặt hàng o BẬT c.customerNumber = o.customerNumber WHERE orderNumber IS NULL;
Ngôn ngữ mã: SQL (Ngôn ngữ truy vấn có cấu trúc) (sql)

3) Sử dụng MySQL LEFT JOIN để nối ba bảng
Nhìn vào ba bảng sau: Nhân viên, Khách hàng và Thanh toán:

Ví dụ này sử dụng hai mệnh đề LEFT JOIN để nối ba bảng: Nhân viên, Khách hàng và Thanh toán.
CHỌN họ, tên, customerName, checkNumber, số tiền TỪ nhân viên TRÁI THAM GIA khách hàng TRÊN employeeNumber = salesRepEmployeeNumberLEFT THAM GIA thanh toán.customerNumber = customers.customerNumberorder BY customerName, checkNumber;
Ngôn ngữ mã: SQL (Ngôn ngữ truy vấn có cấu trúc) (sql) Hình ảnh này hiển thị một phần đầu ra:

Làm thế nào nó hoạt động.
LEFT JOIN đầu tiên trả về tất cả nhân viên và khách hàng đại diện cho từng nhân viên hoặc NULL nếu nhân viên không phụ trách khách hàng. Phép nối bên trái thứ hai trả về một khoản thanh toán cho mỗi khách hàng được đại diện bởi một nhân viên hoặc nếu khách hàng không có khoản thanh toán nào.
Điều kiện mà mệnh đề so với mệnh đề
Xem ví dụ sau.
CHỌN đơn hàng TỪ số đơn hàng, số khách hàng, mã sản phẩm THAM GIA bên trái SỬ DỤNG chi tiết đơn hàng(số đơn hàng) Ở ĐÂU số đơn hàng = 10123;
Ngôn ngữ mã: SQL (Ngôn ngữ truy vấn có cấu trúc) (sql) Ví dụ này sử dụng mệnh đề LEFT JOIN để truy vấn dữ liệu từ bảng ĐẶT HÀNG và CHI TIẾT ĐẶT HÀNG. Truy vấn trả về số thứ tự 10123 và các mục hàng của nó.

Tuy nhiên, nếu bạn chuyển điều kiện từ mệnh đề WHERE sang mệnh đề ON:
CHỌN o.orderNumber, customernumber, productCodeTỪ đơn hàng oTRÁI THAM GIA chi tiết đơn hàng d ON o.orderNumber = d.orderNumber AND o.orderNumber = 10123;
Ngôn ngữ mã: SQL (Ngôn ngữ truy vấn có cấu trúc) (sql) sẽ có một ý nghĩa khác.
Trong trường hợp này, truy vấn trả về tất cả các đơn đặt hàng nhưng chỉ đơn hàng 10123 sẽ có các mục hàng được liên kết với nó như minh họa trong hình ảnh sau:

Lưu ý rằng đối với mệnh đề INNER JOIN, điều kiện trong mệnh đề ON tương đương với điều kiện trong mệnh đề WHERE.
Trong hướng dẫn này, bạn đã học cách sử dụng mệnh đề LEFT JOIN của MySQL để nối dữ liệu từ hai bảng trở lên.