Oracle 中的JOIN

Oracle 中的JOIN

一、概述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;

全鏈接結果集

相關文章
相關標籤/搜索