SQL Server Cross Join子句(交叉連接)

在本教學中,將學習如何使用SQL Server CROSS JOIN連接兩個或多個不相關的表。

以下是兩個表的SQL Server CROSS JOIN的語法:

SELECT
 select_list
FROM
 T1
CROSS JOIN T2;

CROSS JOIN將第一個表(T1)中的每一行與第二個表(T2)中的每一行連接起來。 換句話說,交叉連接返回兩個表中行的笛卡爾積

與INNER JOIN或LEFT JOIN不同,交叉連接不會在連接的表之間建立關係。

假設T1表包含三行:1,23T2表包含三行:ABC

CROSS JOIN從第一個表(T1)獲取一行,然後為第二個表(T2)中的每一行創建一個新行。 然後它對第一個表(T1)中的下一行執行相同操作,依此類推。

在此圖中,CROSS JOIN總共創建了9行。 通常,如果第一個表有n行,第二個表有m行,則交叉連接將產生n x m行。

SQL Server CROSS JOIN示例

以下語句返回所有產品和商店的組合。 結果集可用於月末和年終結算期間的盤點程式:

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

執行上面查詢語句,得到以下結果:

以下語句查找商店中沒有銷售的產品:

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;

執行上面查詢語句,得到以下結果:


上一篇: SQL Server連接表 下一篇: SQL Server數據分組