自連線和笛卡爾積連線的區別

2021-10-08 10:52:45 字數 718 閱讀 4329

原始表「co":

注意:

用於笛卡爾積連線的表可以是同一張表(要設定不同的別名,否則報錯),也可以是多張不同的表;

笛卡爾積連線的原理是不管兩張或多張表的記錄是否匹配,均一一對應生成新的記錄,因此笛卡爾積連線不設定連線條件(如on,wher等)。

select

*from co t1,co t2;

# 注意:同一張表用作笛卡爾積連線時必須設定不同的別名,否則報錯

執行結果如下:

注意:

自連線顧名思義就是自己連線自己,因此只有一張表用來連線生成臨時表;

自連線需要通過」where"關鍵字來設定連線條件,而不是通過「on";

sql表連線時,關鍵字"on"(關鍵字段連線)總是伴隨著「join』出現,而」where"(符合條件連線)是對from字句物件的篩選。

select

*from co t1, co t2

where t1.c_id=t2.c_id;

# 自連線使用"where"而非"on"

笛卡爾積與連線查詢

連線查詢 左連線 右連線 內連線 笛卡爾乘積 集合特性 確定性 無序性 唯一性 一張表可以看做是乙個集合,每行資料相當於集合的乙個元素 union 時 去掉重複 原理 就是集合元素的唯一性 表中存在完全相同的兩行 是因為 表內部存在 rowid 進行區分 笛卡爾積 如果 a a,b b a b a,...

Oracle笛卡爾積與連線查詢

一 外連線 左外連線 左表字段的全部記錄顯示,右表顯示條件限定的字段記錄,非條件限定的顯示null。可以加where限定 select from dept d1 left join emp d2 on d1.deptno d2.deptno select from dept d1 left join...

Mysql 內連線 左連線會出現笛卡爾積

有兩張表,user表和job表,表資料如下 這種等同於 交叉查詢等於不加on的內連線 select from user job sql執行結果 結論 交叉連線,會產生笛卡爾積。結論 假如,內連線查詢,on條件是a表或者b表的唯一字段,則結果集是兩表的交集,不是笛卡爾積。如果a表有m條記錄,m1條符合...