交叉連接(CROSS JOIN)


 

除了在FROM子句中使用逗號間隔連接的表外,SQL還支持另一種被稱為交叉連接的操作,它們都返回被連接的兩個表所有數據行的笛卡爾積,返回到的數據行數等於第一個表中符合查詢條件的數據行數乘以第二個表中符合查詢條件的數據行數。惟一的不同在於,交叉連接分開列名時,使用CROSS JOIN關鍵字而不是逗號。

實際上,下面兩個表達式是完全等價的。

 

SELECT  *  FROM  table1, table2
SELECT  *  FROM  table1  CROSS JOIN  table2

 

圖9.25給出了典型的交叉連接示意圖。

 

 
圖9.25  交叉連接

 

實例15  交叉連接STUDENT表和COURSE表

交叉連接STUDENT表和COURSE表,查詢所有同學的學號、姓名、課程代碼、課程名稱、考試時間和成績信息。實例代碼:

 

SELECT       SNO,  SNAME, S.CNO, C.CNAME, CTEST, MARK
FROM      STUDENT  AS  S
CROSS JOIN COURSE   AS  C   
WHERE  S. CNO = C. CNO
AND   MARK>=60

 

運行結果如圖9.26所示。

注意 在使用CROSS JOIN關鍵字交叉連接表時,因為生成的是兩個表的笛卡爾積,因而不能使用ON關鍵字,只能在WHERE子句中定義搜索條件。

事實上,直接使用CROSS JOIN很少得到想要的結果,但是,正如實例所示,作為查詢的第一步,DBMS通常在FROM子句中,對連接的表進行CROSS JOIN,然后過濾得到的中間表

 

 
圖9.26  交叉連接STUDENT表和COURSE表的查詢結果
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM