Mệnh đề LEFT JOIN trong MySQL

Mệnh đề LEFT JOIN trong MySQL
Mệnh đề LEFT JOIN trong MySQL

Chức năng của Mệnh đề LEFT JOIN trong MySQL

Mệnh đề LEFT JOIN trong MySQL dùng để lấy tất cả các hàng từ bảng bên trái và kết hợp với các hàng có liên quan từ bảng bên phải.

Cú pháp của Mệnh đề LEFT JOIN trong MySQL

select bảng_bêntrái.cộtbêntrái, bảng_bênphải.cộtbênphải, bảng_bênphải.cộtbênphải from bảng_bêntrái LEFT JOIN bảng_bênphải ON bảng_bêntrái.idkhoáchính = bảng_bênphải.idkhóaphụ;

Code Mệnh đề LEFT JOIN trong MySQL

select tb_khachhang.ten,tb_donhang.madonhang,tb_donhang.idsanpham from tb_khachhang LEFT JOIN tb_donhang ON tb_khachhang.id = tb_donhang.idkhachhang;
<?php
   $dbhost = 'localhost';
   $dbuser = 'webmoi_userdata'; // Tên username
   $dbpass = 'IhNRcn9n'; // Mật khẩu
   // Kết nối đến tên username
   $conn = mysql_connect($dbhost, $dbuser, $dbpass);
   if(! $conn ){
     die('Không kết nối được: ' . mysql_error());
   }
   // Truy vấn bảng
   $sql = "select tb_khachhang.ten,tb_donhang.madonhang,tb_donhang.idsanpham from tb_khachhang LEFT JOIN tb_donhang ON tb_khachhang.id = tb_donhang.idkhachhang";
   // Chọn tên database
   mysql_select_db('webmoi_tendata');
   // Xét kiểu tiếng việt 
   mysql_query('SET NAMES "utf8"');
   // Kết quả truy vấn trả về mảng
   $ketqua = mysql_query($sql,$conn);
   if(!$ketqua){
	  die('Không thể lấy dữ liệu: ' . mysql_error());  
   }
   // Dùng vòng lặp để lấy ra từng hàng trong bảng	
   while($row = mysql_fetch_array($ketqua, MYSQL_ASSOC)){
		 echo "Tên sản phẩm: {$row['ten']} <br> ".
         "madonhang : {$row['madonhang']} <br> ".
		 "idsanpham : {$row['idsanpham']} <br> ".
         "--------------------------------<br>";
   }		 
   // Đóng kết nối database
   mysql_close($conn);
?>

Kết quả:

Tên sản phẩm: Bùi Đan Trúc Quỳnh
madonhang : DH01
idsanpham : 1
--------------------------------
Tên sản phẩm: Bùi Đan Trúc Quỳnh
madonhang : DH01
idsanpham : 2
--------------------------------
Tên sản phẩm: Nguyễn Thảo Nhật Hạ
madonhang : DH02
idsanpham : 2
--------------------------------
Tên sản phẩm: Trần Ngọc Thanh
madonhang :
idsanpham :
--------------------------------

Cách sử dụng Mệnh đề LEFT JOIN trong MySQL hiệu quả

LEFT JOIN phát huy hiệu quả khi cần lấy đầy đủ dữ liệu từ bảng chính, đồng thời bổ sung thông tin từ bảng liên quan nếu có bản ghi phù hợp. Khi kết hợp thêm điều kiện lọc hoặc nhiều bảng, cần xác định rõ mục tiêu truy vấn để tránh làm mất những dòng dữ liệu mà LEFT JOIN cần giữ lại.

Kết hợp LEFT JOIN với điều kiện WHERE

Khi sử dụng LEFT JOIN cùng WHERE, cần chú ý vị trí đặt điều kiện. Nếu điều kiện trong WHERE yêu cầu cột của bảng bên phải phải có giá trị, những dòng không tìm thấy dữ liệu liên quan có thể bị loại khỏi kết quả.

Ví dụ, truy vấn sau chỉ lấy khách hàng có đơn hàng:

SELECT khach_hang.ten, don_hang.ma_don
FROM khach_hang
LEFT JOIN don_hang
ON khach_hang.id = don_hang.khach_hang_id
WHERE don_hang.ma_don IS NOT NULL;

Nếu mục tiêu là vẫn giữ khách hàng chưa có đơn hàng, điều kiện lọc cần được cân nhắc và đặt phù hợp với logic truy vấn. Đây là điểm quan trọng khi sử dụng LEFT JOIN để tránh kết quả không đúng với nhu cầu.

Lọc dữ liệu không có bản ghi liên quan

Một ứng dụng hữu ích của LEFT JOIN là tìm những bản ghi ở bảng chính chưa có dữ liệu tương ứng trong bảng liên quan. Cách thực hiện phổ biến là kiểm tra cột của bảng bên phải có giá trị NULL hay không.

Ví dụ, muốn tìm khách hàng chưa từng có đơn hàng:

SELECT khach_hang.id, khach_hang.ten
FROM khach_hang
LEFT JOIN don_hang
ON khach_hang.id = don_hang.khach_hang_id
WHERE don_hang.id IS NULL;

Kết quả chỉ gồm các khách hàng không có bản ghi phù hợp trong bảng đơn hàng. Cách này phù hợp với nhiều bài toán như tìm sản phẩm chưa phát sinh đơn, tài khoản chưa có hoạt động hoặc danh mục chưa có dữ liệu liên quan.

LEFT JOIN nhiều bảng trong một truy vấn

LEFT JOIN có thể được sử dụng liên tiếp để lấy dữ liệu từ nhiều bảng. Bảng đầu tiên đóng vai trò dữ liệu chính, sau đó từng bảng liên quan được nối dựa trên khóa tương ứng.

SELECT khach_hang.ten, don_hang.ma_don, thanh_toan.trang_thai
FROM khach_hang
LEFT JOIN don_hang
ON khach_hang.id = don_hang.khach_hang_id
LEFT JOIN thanh_toan
ON don_hang.id = thanh_toan.don_hang_id;

Trong trường hợp này, khách hàng vẫn được giữ lại ngay cả khi chưa có đơn hàng hoặc đơn hàng chưa có thông tin thanh toán. Khi LEFT JOIN nhiều bảng, nên kiểm tra quan hệ giữa các khóa và số lượng bản ghi phát sinh để tránh kết quả bị nhân dòng ngoài mong muốn.

Lời kết

Cảm ơn các bạn đã tham khảo bài viết Mệnh đề LEFT JOIN trong MySQL.

Tải file database .sql về nếu muốn kiểm tra hoặc thực hành Tải về.

  • 0 Bình luận
CEO Bùi Tấn Lực | Founder Web Mới
Bùi Tấn Lực
Tìm hiểu về CEO Bùi Tấn Lực, Founder Web Mới với nhiều năm kinh nghiệm trong lĩnh vực phát triển website, SEO và chia sẻ kiến thức công nghệ
Đánh giá
Chia sẻ nội dung đánh giá của bạn về Mệnh đề LEFT JOIN trong MySQL
Email, Điện thoại 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 *
Đánh giá của bạn
Tên *
Email
Số điện thoại *
Bình luận, Hỏi đáp
Yêu Cầu Báo Giá
Gửi trang web mẫu cần làm theo, chúng tôi sẽ báo giá đến bạn từ Email (tanlucit09@gmail.com - Bùi Tấn Lực) hoặc Zalo (Lực IT - 0398259259) !