Mệnh đề CROSS JOIN trong MySQL

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

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

Mệnh đề CROSS JOIN trong MySQL dùng để kết hợp mỗi hàng của bảng này với mỗi hàng của bảng kia.

Code Mệnh đề CROSS JOIN trong MySQL

Ở đầy mình tạo 2 bảng:

bảng tb_bangmau có: màu đỏ, màu xanh dương

bảng tb_bangkichthuoc: Size Lớn, Size Vừa, Size Nhỏ.

Mệnh đề CROSS JOIN trong MySQL

select tb_bangmau.ten AS tenbangmau,tb_bangkichthuoc.ten AS tenkichthuoc from tb_bangmau CROSS JOIN tb_bangkichthuoc;
<?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_bangmau.ten AS tenbangmau,tb_bangkichthuoc.ten AS tenkichthuoc from tb_bangmau CROSS JOIN tb_bangkichthuoc";
   // 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 "tenbangmau: {$row['tenbangmau']} <br> ".
         "tenkichthuoc : {$row['tenkichthuoc']} <br> ".
         "--------------------------------<br>";
   }		 
   // Đóng kết nối database
   mysql_close($conn);
?>

Kết quả:

tenbangmau: Màu đỏ
tenkichthuoc : Size Lớn
--------------------------------
tenbangmau: Màu xanh dương
tenkichthuoc : Size Lớn
--------------------------------
tenbangmau: Màu đỏ
tenkichthuoc : Size Vừa
--------------------------------
tenbangmau: Màu xanh dương
tenkichthuoc : Size Vừa
--------------------------------
tenbangmau: Màu đỏ
tenkichthuoc : Size Nhỏ
--------------------------------
tenbangmau: Màu xanh dương
tenkichthuoc : Size Nhỏ
--------------------------------

Mệnh đề CROSS JOIN dùng dấu phẩy trong MySQL

select tb_bangmau.ten AS tenbangmau,tb_bangkichthuoc.ten AS tenkichthuoc from tb_bangmau, tb_bangkichthuoc;
<?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_bangmau.ten AS tenbangmau,tb_bangkichthuoc.ten AS tenkichthuoc from tb_bangmau, tb_bangkichthuoc";
   // 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 "tenbangmau: {$row['tenbangmau']} <br> ".
         "tenkichthuoc : {$row['tenkichthuoc']} <br> ".
         "--------------------------------<br>";
   }		 
   // Đóng kết nối database
   mysql_close($conn);
?>

Kết quả:

tenbangmau: Màu đỏ
tenkichthuoc : Size Lớn
--------------------------------
tenbangmau: Màu xanh dương
tenkichthuoc : Size Lớn
--------------------------------
tenbangmau: Màu đỏ
tenkichthuoc : Size Vừa
--------------------------------
tenbangmau: Màu xanh dương
tenkichthuoc : Size Vừa
--------------------------------
tenbangmau: Màu đỏ
tenkichthuoc : Size Nhỏ
--------------------------------
tenbangmau: Màu xanh dương
tenkichthuoc : Size Nhỏ
--------------------------------

Ứng dụng CROSS JOIN trong MySQL vào thực tế

CROSS JOIN phù hợp với những bài toán cần tạo ra mọi tổ hợp có thể giữa hai tập dữ liệu. Thay vì ghép bản ghi dựa trên một cột liên quan, phép nối này kết hợp từng dòng của bảng thứ nhất với từng dòng của bảng thứ hai.

Trong thực tế, CROSS JOIN có thể được dùng để xây dựng danh sách tổ hợp sản phẩm, tạo các phương án lựa chọn, kết hợp danh mục với thuộc tính hoặc chuẩn bị dữ liệu cho những truy vấn cần xét toàn bộ khả năng.

Tạo tất cả tổ hợp dữ liệu giữa các bảng

Khi cần lấy mọi khả năng kết hợp giữa hai bảng, CROSS JOIN là lựa chọn trực tiếp. Ví dụ, một cửa hàng có bảng màu sắc và bảng kích thước. Nếu mỗi màu có thể đi cùng mọi kích thước, CROSS JOIN có thể tạo danh sách toàn bộ biến thể sản phẩm.

SELECT
    colors.name AS color,
    sizes.name AS size
FROM colors
CROSS JOIN sizes;

Nếu bảng colors có 3 dòng và bảng sizes có 4 dòng, kết quả sẽ có 12 tổ hợp. Số lượng kết quả được hình thành từ phép nhân số dòng của hai bảng.

Cách này đặc biệt hữu ích khi dữ liệu cần tạo ra không phụ thuộc vào một khóa liên kết cụ thể giữa hai bảng.

Kết hợp CROSS JOIN với điều kiện lọc dữ liệu

CROSS JOIN tạo ra toàn bộ tổ hợp trước khi áp dụng điều kiện lọc. Vì vậy, có thể kết hợp với WHERE để giữ lại những trường hợp đáp ứng yêu cầu thực tế.

SELECT
    colors.name AS color,
    sizes.name AS size
FROM colors
CROSS JOIN sizes
WHERE colors.status = 1
  AND sizes.status = 1;

Cách viết này giúp giới hạn dữ liệu đầu vào trước khi xử lý các tổ hợp cần thiết. Tuy nhiên, nếu số lượng bản ghi lớn, tổng số kết quả trung gian vẫn có thể tăng nhanh. Do đó, nên xác định rõ phạm vi dữ liệu cần kết hợp thay vì sử dụng CROSS JOIN trên những bảng có quá nhiều dòng.

Những trường hợp nên và không nên sử dụng CROSS JOIN

Nên sử dụng CROSS JOIN khi bài toán thực sự cần tất cả các tổ hợp giữa hai tập dữ liệu. Một số trường hợp điển hình là tạo biến thể sản phẩm, xây dựng các phương án kết hợp hoặc chuẩn bị tập dữ liệu phục vụ phân tích.

Không nên dùng CROSS JOIN chỉ để thay thế cho các phép nối có điều kiện như INNER JOIN hoặc LEFT JOIN. Nếu hai bảng có mối quan hệ thông qua khóa và chỉ cần lấy những bản ghi liên quan, CROSS JOIN có thể tạo ra lượng dữ liệu lớn không cần thiết.

Đặc biệt, cần chú ý số lượng dòng của hai bảng trước khi thực hiện. Nếu một bảng có 10.000 dòng và bảng còn lại có 5.000 dòng, CROSS JOIN về lý thuyết có thể tạo tới 50 triệu tổ hợp. Vì vậy, xác định đúng mục đích và giới hạn dữ liệu là yếu tố quan trọng khi sử dụng phép nối này trong MySQL.

Lời kết

Cảm ơn các bạn đã tham khảo bài viết Mệnh đề CROSS 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 đề CROSS 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) !