oracle中 常用的 join on 相關和 集合運算的總結
阿新 • • 發佈:2017-09-18
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 相關和 集合運算的總結