在本教學中,將學習如何使用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數據分組