除了在FROM子句中使用逗號間隔連接的表外,SQL還支持另一種被稱為交叉連接的操作,它們都返回被連接的兩個表所有數據行的笛卡爾積,返回到的數據行數等於第一個表中符合查詢條件的數據行數乘以第二個表中符合查詢條件的數據行數。惟一的不同在於,交叉連接分開列名時,使用CROSS JOIN關鍵字而不是逗號。
實際上,下面兩個表達式是完全等價的。
SELECT * FROM table1, table2 |
圖9.25給出了典型的交叉連接示意圖。
實例15 交叉連接STUDENT表和COURSE表
交叉連接STUDENT表和COURSE表,查詢所有同學的學號、姓名、課程代碼、課程名稱、考試時間和成績信息。實例代碼:
SELECT SNO, SNAME, S.CNO, C.CNAME, CTEST, MARK |
運行結果如圖9.26所示。
注意 在使用CROSS JOIN關鍵字交叉連接表時,因為生成的是兩個表的笛卡爾積,因而不能使用ON關鍵字,只能在WHERE子句中定義搜索條件。
事實上,直接使用CROSS JOIN很少得到想要的結果,但是,正如實例所示,作為查詢的第一步,DBMS通常在FROM子句中,對連接的表進行CROSS JOIN,然后過濾得到的中間表。