CROSS JOIN và FULL JOIN - TTW Marketing

 

CROSS JOINFULL JOIN không giống nhau, mặc dù cả hai đều liên quan đến việc kết hợp dữ liệu từ hai bảng. Dưới đây là sự khác biệt giữa chúng

Join Diagram

1. CROSS JOIN

  • Cách hoạt động: CROSS JOIN kết hợp tất cả các bản ghi của bảng này với tất cả các bản ghi của bảng kia.
  • Kết quả: Số bản ghi trong kết quả là tích của số bản ghi từ hai bảng (cartesian product).
  • Sử dụng: Hiếm khi được dùng, nhưng có thể hữu ích khi cần so sánh hoặc tạo tổ hợp tất cả các cặp giá trị từ hai bảng.

Ví dụ:

sql
SELECT *
FROM TableA
CROSS JOIN TableB;
  • Nếu TableA có 3 dòng và TableB có 2 dòng, kết quả sẽ có 3×2=63 \times 2 = 6 dòng.

2. FULL JOIN (FULL OUTER JOIN)

  • Cách hoạt động: FULL JOIN kết hợp tất cả các bản ghi từ cả hai bảng, bao gồm:
    • Các bản ghi khớp (theo điều kiện ON).
    • Các bản ghi không khớp từ bảng đầu tiên (với NULL ở cột của bảng kia).
    • Các bản ghi không khớp từ bảng thứ hai (với NULL ở cột của bảng đầu tiên).
  • Kết quả: Một tập hợp đầy đủ các bản ghi từ hai bảng.

Ví dụ:

sql
SELECT *
FROM TableA
FULL OUTER JOIN TableB
ON TableA.id = TableB.id;
  • Nếu TableA có 3 dòng, TableB có 2 dòng, và chỉ 1 dòng khớp, kết quả sẽ có 4 dòng (bao gồm các dòng không khớp từ cả hai bảng).

So sánh nhanh:

Đặc điểm CROSS JOIN FULL JOIN
Cách kết hợp Tất cả cặp giá trị từ hai bảng Bản ghi khớp và không khớp
Số lượng bản ghi Tích số bản ghi của hai bảng Tập hợp tất cả bản ghi của hai bảng
Hỗ trợ trong MySQL Không (phải mô phỏng bằng UNION)

FULL JOIN trong MySQL

MySQL không hỗ trợ trực tiếp FULL OUTER JOIN. Bạn có thể mô phỏng bằng cách sử dụng UNION của LEFT JOINRIGHT JOIN:

sql
SELECT *
FROM TableA
LEFT JOIN TableB
ON TableA.id = TableB.id

UNION

SELECT *
FROM TableA
RIGHT JOIN TableB
ON TableA.id = TableB.id;

  • Cách này: Mang lại kết quả giống như FULL OUTER JOIN.

Tóm lại:

  • CROSS JOINFULL JOIN.
  • CROSS JOIN tạo tất cả cặp giá trị từ hai bảng.
  • FULL JOIN kết hợp bản ghi khớp và không khớp từ hai bảng.

 

Video tham khảo :  Full Join

Đánh giá post