有表t1,t2
t1:c1 c2 c3
-- ---------- --
1 rick b0
2 smith c0
3 john e0
3 條記錄已選擇。
t2:c1 c2
-- ----------
a0 sale dept
b0 prod dept
c0 cout dept
d0 mage dept
4 條記錄已選擇。
1.db2的內連線
下面是內連線,內連線和普通的where子句,輸出相同,即在兩表共有的行才會輸出,即也可以用:select * from t1,t2 where t1.c3=t2.c1
內連線沒有左右之分.
db2 => select * from t1 inner join t2 on t1.c3=t2.c1
c1 c2 c3 c1 c2
-- ---------- -- -- ----------
1 rick b0 b0 prod dept
2 smith c0 c0 cout dept
2 條記錄已選擇。
2.db2的外連線:外連線分左外連線右外連線,下面我們看看他們的區別:
db2 => select * from t1 left outer join t2 on t1.c3=t2.c1
c1 c2 c3 c1 c2
-- ---------- -- -- ----------
1 rick b0 b0 prod dept
2 smith c0 c0 cout dept
3 john e0 - -
3 條記錄已選擇。
左連線保留前面表的所有記錄,後表中沒有的補null.
db2 => select * from t1 right outer join t2 on t1.c3=t2.c1
c1 c2 c3 c1 c2
-- ---------- -- -- ----------
- - - a0 sale dept
1 rick b0 b0 prod dept
2 smith c0 c0 cout dept
- - - d0 mage dept
4 條記錄已選擇。
左連線保留後表的所有記錄,前表中沒有的補null.
我們可以把右連線,的表的順序顛倒一下,並寫成左外連線,其結果應該是一樣的.
在db2的內部機制中,會把右外連線重寫成左外連線.故我們在寫sql語句時盡量使用左外連線.
3.全外連線.
db2 => select * from t1 full outer join t2 on t1.c3=t2.c1
c1 c2 c3 c1 c2
-- ---------- -- -- ----------
- - - a0 sale dept
1 rick b0 b0 prod dept
2 smith c0 c0 cout dept
- - - d0 mage dept
3 john e0 - -
5 條記錄已選擇。
全外連線會輸出兩表的所有的資料,包括內連線和左外連線和右外連線的行.
4.與sybase的區別: sybase的sql語句相應的連線有:
select * from t1,t2 where t1.c3=t2.c1 相當於內連線
select * from t1,t2 where t1.c3 *= t2.c1 相當於左外連線
select * from t1,t2 where t1.c3 =* t2.c1 相當於右外連線
總結:內連線,全有才有;左外連線,左有就有;右外連線,右有就有;全外連線,全都有.
SQL 內連線,外連線
假設一堆男女在教堂,有夫婦有單身的,假設男為左表,女為右表 教父說 結了婚的人請出去,結了婚的人請手拉手,於是結了婚的男女站了起來,這就是inner 內連 教父說 男的並且和這些男的結婚的女的請出去,結了婚的人請手拉手,於是,結了婚的夫婦手拉手出去,單身的男的也出去了。這就是 left 左連 教父說...
SQL 內連線 外連線
通過where 或者 inner join保留表中的一部分,最直觀就是說 表在選擇投影後,得到的各個元組內的元素都不會是空的。inner join 表中至少乙個匹配時,返回行。左連線 即使右表中沒有匹配,也從左表中返回所有行。因次,元組中的元素若有來自右表,則該元素為空。右連線 即使左表中沒有匹配,...
2 內連線 外連線
資料庫中涉及兩個表之間的資料查詢通常使用連線的方法實現。連線分為內連線和外連線。內連線 指連線結果僅包含符合連線條件的行,參與連線的兩個表都應該符合連線條件。外連線 連線結果不僅包含符合連線條件的行同時也包含自身不符合條件的行。包括左外連線 右外連線和全外連線。左外連線 左邊表資料行全部保留,右邊表...