CROSS JOIN trong SQL Server

Trong hướng dẫn này, bạn sẽ tìm hiểu cách sử dụng mệnh đề CROSS JOIN trong SQL Server để truy vấn dữ liệu từ hai hoặc nhiều bảng không liên quan.

Phần sau đây minh họa cú pháp của CROSS JOIN trong  SQL Server để truy vấn dữ liệu từ hai bảng:

SELECT
	select_list
FROM
	T1
CROSS JOIN T2;

Mệnh đề CROSS JOIN sẽ nối mỗi bản ghi từ bảng đầu tiên (T1) với mỗi bản ghi từ bảng thứ hai (T2). Nói cách khác CROSS JOIN trả về tích Đề Các các bản ghi từ cả hai bảng.

Không giống như mệnh đề INNER JOIN, LEFT JOIN, RIGHT JOIN hay FULL OUTER JOIN. CROSS JOIN không thiết lập mối quan hệ giữa các bảng được join.

Giả sử bảng T1 chứa ba bản ghi 1, 2 và 3 và bảng T2 chứa ba bản ghi A, B và C.

Mệnh đề CROSS JOIN lấy một bản ghi từ bảng đầu tiên (T1) và sau đó tạo một bản ghi mới cho mỗi bản ghi trong bảng thứ hai (T2). Sau đó, nó làm tương tự cho bản ghi tiếp theo trong bảng đầu tiên (T1), v.v.

CROSS JOIN trong SQL Server

Trong hình minh họa này, CROSS JOIN  tạo ra tổng cộng chín bản ghi. Nói chung, nếu bảng đầu tiên có n bản ghi và bảng thứ hai có m bản ghi, CROSS JOIN sẽ tạo ra n * m bản ghi.

Ví dụ về CROSS JOIN trong SQL Server

Câu lệnh sau đây trả về một tập kết quả là sự kết hợp của tất cả các sản phẩm và cửa hàng. Tập kết quả có thể được sử dụng cho thủ tục kiểm kê trong thời gian đóng cửa cuối tháng và cuối năm:

SELECT
    product_id,
    product_name,
    store_id,
    0 AS quantity
FROM
    production.products
CROSS JOIN sales.stores
ORDER BY
    product_name,
    store_id;

Đây là kết quả:

Ví dụ về CROSS JOIN trong SQL Server

Câu lệnh sau đây tìm kiếm các sản phẩm không có doanh số trên các cửa hàng:

SELECT
    s.store_id,
    p.product_id,
    ISNULL(sales, 0) sales
FROM
    sales.stores s
CROSS JOIN production.products p
LEFT JOIN (
    SELECT
        s.store_id,
        p.product_id,
        SUM (quantity * i.list_price) sales
    FROM
        sales.orders o
    INNER JOIN sales.order_items i ON i.order_id = o.order_id
    INNER JOIN sales.stores s ON s.store_id = o.store_id
    INNER JOIN production.products p ON p.product_id = i.product_id
    GROUP BY
        s.store_id,
        p.product_id
) c ON c.store_id = s.store_id
AND c.product_id = p.product_id
WHERE
    sales IS NULL
ORDER BY
    product_id,
    store_id;

Đây là kết quả:

Ví dụ về CROSS JOIN trong SQL Server

Trong hướng dẫn này, bạn đã học cách sử dụng CROSS JOIN trong SQL Server để tạo tích Đề Các từ các bảng đã join.



Bài viết liên quan:

Cách sử dụng mệnh đề HAVING trong SQL Server để lọc các nhóm dựa trên các điều kiện được chỉ định.

Tìm hiểu mọi thứ cần biết về trigger trong SQL Server giúp bạn sử dụng trigger hiệu quả nhất.

Tìm hiểu mọi thứ bạn cần biết về function trong SQL Server: bao gồm hàm vô hướng và hàm bảng.