在本教程中,将学习如何使用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,2和3,T2表包含三行:A,B和C。
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数据分组
												
						
						
					
					
					