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数据分组