使用交叉聯結

已完成

交叉聯結單純就是兩個資料表的笛卡兒乘積。 使用 ANSI SQL-89 語法時,您可以直接將連結兩個資料表的篩選保持關閉來建立交叉聯結。 使用 ANSI-92 語法時,作法會變得比較困難,不過這是好事,因為一般來說,人們通常並不會想要使用交叉聯結。 使用 ANSI-92 語法,您很難意外進行交叉聯結。

若要明確建立笛卡兒乘積,您應該使用 CROSS JOIN 運算子。

此作業會建立具有所有可能輸入資料列組合的結果集:

SELECT <select_list>
FROM table1 AS t1
CROSS JOIN table2 AS t2;

雖然此結果通常不是人們會想要的輸出,撰寫明確 CROSS JOIN 仍然有幾個實際的應用:

  • 建立數字資料表,其中資料列代表某個範圍內的每一個可能值。
  • 產生大量資料以供測試。 當資料表與其本身進行交叉聯結時,就算是只有 100 個資料列的資料表,也能為您快速產生 10,000 個輸出資料列。

CROSS JOIN 語法

使用 CROSS JOIN 撰寫查詢時,請考慮下列指導方針:

  • 由於不會執行資料列的比對,因此不會使用任何 ON 子句。 (搭配 CROSS JOIN 使用 ON 子句是錯誤的。)
  • 若要使用 ANSI SQL-92 語法,請使用 CROSS JOIN 運算子分隔輸入資料表名稱。

下列查詢是使用 CROSS JOIN 來建立所有員工和產品組合的範例:

SELECT emp.FirstName, prd.Name
FROM HR.Employee AS emp
CROSS JOIN Production.Product AS prd;