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.

SQL Server
Bài Viết Liên Quan:
Hướng dẫn đầy đủ về Expression trong SQL Server
Trung Nguyen 18/03/2021
Hướng dẫn đầy đủ về Expression trong SQL Server

Trong hướng dẫn này, bạn sẽ học cách sử dụng biểu thức CASE, COALESCE và NULLIF trong SQL Server.

NULLIF trong SQL Server
Trung Nguyen 18/03/2021
NULLIF trong SQL Server

Trong hướng dẫn này, bạn sẽ học cách sử dụng biểu thức NULLIF trong SQL Server để trả về NULL nếu đối số đầu tiên bằng đối số thứ hai.

COALESCE trong SQL Server
Trung Nguyen 18/03/2021
COALESCE trong SQL Server

Trong hướng dẫn này, bạn sẽ học cách sử dụng biểu thức COALESCE trong SQL Server để xử lý giá trị NULL trong các truy vấn.

CASE trong SQL Server
Trung Nguyen 18/03/2021
CASE trong SQL Server

Trong hướng dẫn này, bạn sẽ học cách sử dụng biểu thức CASE trong SQL Server để thêm logic if-else vào các truy vấn SQL.