在使用sql 會經常使用join
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--
以下三種查詢結果一樣。
3select
*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--
以下兩種查詢結果一樣。
3select
*from student s cross
join class c; 4
select
*from student,class;
注意:如果cross join加上where s.classid=c.id條件,會產生跟自連線一樣的結果:
1自連線結果集的cross join連線結果--加上條件,產生跟自連線一樣的結果。
2select
*from student s cross
join class c where s.classid=c.id;
2.3、左外連線:left join
1左連線結果:--左連線 :列出左邊表全部的,及右邊表符合條件的,不符合條件的以空值代替。2--
在(+)計算時,哪個帶(+)哪個需要條件符合的,另乙個全部的。即放左即右連線,放右即左連線。3--
以下結果集相同。
4select
*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--
(+)一樣,它的位置與連線相反。
4select
*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的結果集,列出兩表全部的,不符合條件的,以空值代替。
2select
*from student s full
join class c on s.classid=c.id;
oracle join關鍵字使用總結
1.內連線 b color red 選出兩個表中所有符合連線條件的row構成的集合。color b 2.外連線 分為left right full三種 如有r與s做連線,那麼left是所有滿足條件的row以及所有在r屬性對應值在s中為null的集合。注意 color red left join 是 ...
Regmon使用詳解
新近安裝foxmail 5.0正式版,卻發現只能收取而不能傳送郵件。經過一番檢查確定,網路正常,foxmail設定也正確。那麼究竟是 何方神聖 在暗中搗鬼呢?甭急,咱先請來個 福爾摩斯 regmon幫忙查出 真兇 regmon v6.12小檔案 軟體版本 6.12 軟體大小 82 kb 軟體性質 免...
FCKeditor使用詳解
fckeditor 的.net 2.0核心庫 說明 fckeditor2.6.3.zip是其最新的檔案和什麼的 fckeditor.net.zip是asp.net呼叫的dll在裡面。2.分別解壓後把fckeditor2.6.3.zip裡的fckeditor目錄整個複製到 中。3.解壓fckedito...