1、概述
1.1、所有的join串連,都可以加上類似where a.id='1000'的條件,達到同樣的效果。
1.2、除了cross join不可以加on外,其它join串連都必須加上on關鍵字,後都可加where條件。
1.3、雖然都可以加where條件,但是他們只在標準串連的結果集上尋找where條件。比如左外串連的結果沒有class的三班,所以如果加 where class.id='C003'雖然在表中有,但在左串連結果集中沒有,所以查詢後,是沒有記錄的。
2、執行個體,標準的join串連,(不加where條件的)
2.1、設有表如下:
學生表
班級表,對應學生表中的classid
2.2、自串連:join ,inner join
1 --自串連 :只返回兩張表串連列的匹配項。
2 --以下三種查詢結果一樣。
3 select * from student s inner join class c on s.classid=c.id;
4 select * from student s join class c on s.classid=c.id;
5 select * from student s,class c where s.classid=c.id;
自串連結果:
2.3、笛卡兒乘積:cross join
1 --笛卡兒乘積串連 :即不加任何條件,達到 M*N 的結果集。
2 --以下兩種查詢結果一樣。
3 select * from student s cross join class c;
4 select * from student,class;
笛卡爾結果:
注意:如果cross join加上where s.classid=c.id條件,會產生跟自串連一樣的結果:
1 --加上條件,產生跟自串連一樣的結果。
2 select * from student s cross join class c where s.classid=c.id;
自串連結果集的cross join串連結果
2.3、左外串連:left join
1 --左串連 :列出左邊表全部的,及右邊表合格,不合格以空值代替。
2 --在(+)計算時,哪個帶(+)哪個需要條件符合的,另一個全部的。即放左即右串連,放右即左串連。
3 --以下結果集相同。
4 select * from student s left join class c on s.classid=c.id;
5 select * from student s,class c where s.classid=c.id(+);
左串連結果:
2.4、右外串連:right join
1 --右外串連 :與左串連一樣,列出右邊表全部的,及左邊表合格,不符合條件
2 --的用 空值 替代。
3 --(+)一樣,它的位置與串連相反。
4 select * from student s right join class c on s.classid=c.id;
5 select * from student s,class c where s.classid(+)=c.id;
右串連結果
2.5、全串連:full join
1 --全串連 :產生M+N的結果集,列出兩表全部的,不合格,以空值代替。
2 select * from student s full join class c on s.classid=c.id;
全串連結果集