除了在from子句中使用逗號間隔連線的表外,sql還支援另一種被稱為交叉連線的操作,它們都返回被連線的兩個表所有資料行的笛卡爾積,返回到的資料行數等於第乙個表中符合查詢條件的資料行數乘以第二個表中符合查詢條件的資料行數。惟一的不同在於,交叉連線分開列名時,使用cross join關鍵字而不是逗號。
實際上,下面兩個表示式是完全等價的。
select * from table1, table2圖9.25給出了典型的交叉連線示意圖。select * from table1 cross join table2
圖9.25 交叉連線
例項15 交叉連線student表和course表
交叉連線student表和course表,查詢所有同學的學號、姓名、課程**、課程名稱、考試時間和成績資訊。例項**:
select sno, sname, s.cno, c.cname, ctest, mark執行結果如圖9.26所示。from student as s
cross join course as c
where s. cno = c. cno
and mark>=60
注意 在使用cross join關鍵字交叉連線表時,因為生成的是兩個表的笛卡爾積,因而不能使用on關鍵字,只能在where子句中定義搜尋條件。
事實上,直接使用cross join很少得到想要的結果,但是,正如例項所示,作為查詢的第一步,dbms通常在from子句中,對連線的表進行cross join,然後過濾得到的中間表。
圖9.26 交叉連線student表和course表的查詢結果
笛卡爾積 cross join
交叉連線 返回左表中的所有行,左表中的每一行與右表中的所有行組合。交叉聯接也稱作笛卡爾積 首先,先簡單解釋一下笛卡爾積 笛卡爾乘積是指在數學中,兩個集合 x和y的笛卡尓積 cartesian product 又稱直積,表示為x y,第乙個物件是x的成員而第二個物件是y的所有可能有序對的其中乙個成員 ...
CROSS JOIN連線用於生成兩張表的笛卡爾集
將兩張表的情況全部列舉出來 結果表 列 原表列數相加 行 原表行數相乘 cross join連線用於生成兩張表的笛卡爾集。在sql中cross join的使用 1 返回的記錄數為兩個表的記錄數乘積。2 將a表的所有行分別與b表的所有行進行連線。例如 tablea r1 r2 a bc d table...
內連線 外連線 交叉連線
一 連線查詢 根據兩個表或者多個表的列之間的關係,從這些表中查詢資料。目的 實現多個表查詢操作。二 連線型別 連線分為三種 內連線 外連線 交叉連線。1 內連線 使用比較運算子 包括 和 進行表間的比較操作,查詢與連線條件相匹配的資料。根據比較運算子不同,內連線分為等值連線和不等連線兩種。1.1 等...