一、概述html
1.一、全部的join鏈接,均可以加上相似where a.id='1000'的條件,達到一樣的效果。ide
1.二、除了cross join不能夠加on外,其它join鏈接都必須加上on關鍵字,後均可加where條件。post
1.三、雖然均可以加where條件,可是他們只在標準鏈接的結果集上查找where條件。好比左外鏈接的結果沒有class的三班,因此若是加 where class.id='C003'雖然在表中有,但在左鏈接結果集中沒有,因此查詢後,是沒有記錄的。url
二、實例,標準的join鏈接,(不加where條件的)spa
2.一、設有表以下:code
學生表htm
班級表,對應學生表中的classidblog
2.二、自鏈接:join ,inner joinget
1--自鏈接 :只返回兩張錶鏈接列的匹配項。2--如下三種查詢結果同樣。3select*from student s innerjoin class c on s.classid=c.id; 4select*from student s join class c on s.classid=c.id; 5select*from student s,class c where s.classid=c.id;
自鏈接結果:it
2.三、笛卡兒乘積:cross join
1--笛卡兒乘積鏈接 :即不加任何條件,達到 M*N 的結果集。
2--如下兩種查詢結果同樣。
3select*from student s crossjoin class c;
4select*from student,class;
笛卡爾結果:
注意:若是cross join加上where s.classid=c.id條件,會產生跟自鏈接同樣的結果:
1--加上條件,產生跟自鏈接同樣的結果。2select*from student s crossjoin class c where s.classid=c.id;
自鏈接結果集的cross join鏈接結果
2.三、左外鏈接:left join
1--左鏈接 :列出左邊表所有的,及右邊表符合條件的,不符合條件的以空值代替。
2--在(+)計算時,哪一個帶(+)哪一個須要條件符合的,另外一個所有的。即放左即右鏈接,放右即左鏈接。
3--如下結果集相同。
4select*from student s leftjoin class c on s.classid=c.id;
5select*from student s,class c where s.classid=c.id(+);
左鏈接結果:
2.四、右外鏈接:right join
1--右外鏈接 :與左鏈接同樣,列出右邊表所有的,及左邊表符合條件的,不符合條件2--的用 空值 替代。3--(+)同樣,它的位置與鏈接相反。4select*from student s rightjoin class c on s.classid=c.id; 5select*from student s,class c where s.classid(+)=c.id;
右鏈接結果
2.五、全鏈接:full join
1--全鏈接 :產生M+N的結果集,列出兩表所有的,不符合條件的,以空值代替。
2select*from student s fulljoin class c on s.classid=c.id;
全鏈接結果集