1. 程式人生 > >oracle中 常用的 join on 相關和 集合運算的總結

oracle中 常用的 join on 相關和 集合運算的總結

nal 但是 總結 rom 全部 right light style 是把

sql常用聯合查詢的 join on 、 left join(左連接) 、 right join (右連接)、inner join (等值連接)以及常用的集合運算有:union、unionall、minus、intersect的效果和總結

首先接著用上一篇的book表和pbook表:
技術分享技術分享

首先把join on和inner join 放在一起:

select  * from   book a    join  ( select id,name,price from   pbook) b on   a.id=b.id;
select  * from   book a    inner join  ( select id,name,price from   pbook) b on   a.id=b.id;

技術分享技術分享

相比較這結果一模一樣,只返回兩個表中聯結字段id相等的行

接著我們看左、右連接比較:

select  * from   book a    left join  ( select id,name,price from   pbook) b on   a.id=b.id;
select  * from   book a    right join  ( select id,name,price from   pbook) b on   a.id=b.id;

技術分享技術分享

明顯能看出,左連接以左表為主,左表全部顯示,右表只顯示關聯的,其余為空,總行數是左表的行。右連接是以右表為主,顯示右邊所有行,左表關聯的行顯示,其余為空


下面 常用的集合運算的比較:

首先我們比較一下union 和union all 結果比較

select   * from  book      union  select id,name,price from   pbook;
select   * from  book      union all select id,name,price from   pbook;

技術分享技術分享

這裏能夠看出:union 和union all 把相同列合並了,union對合並的數據去掉了重復行並且進行了排序。而union all 則是把2個表合起來,沒有排序或者去重。

提示:1.表面上看union對數據進行排序,但是不能保證排序一定正確。

(在oralce10之前是排序去重,之後是Hash UNIQUE運算去重,而它只比較散列值不進行排序)

2.當數據量很大時,速率上來講,union all 會比union 快很多。

下一組比較:minus,intersect

select   * from  book      minus select id,name,price from   pbook;
select   * from  book  intersect   (select id,name,price from   pbook)

技術分享技術分享

很明顯:minus是把2個表沖突數據提出來,而intersect是把2個表的相同數據提出來

oracle中 常用的 join on 相關和 集合運算的總結