這麼久終於可以靜下來整理一下工作上學到的東西了(主要還是自己太懶了。。)
廢話少説,正文開始
在公司裏,數據庫用的基本都是Oracle,所以就學了一下Oracle的一點知識,現在整理一下自己遇到的問題和學到的一些東西。
先説説自己經常搞混的內連接、外連接(大學裏一直沒搞懂。。)
數據表之間有很多種連接方式,如:內外連接等
一(內連接):
內連接就是我們經常説的等值連接或者自然連接。
內連接用連接 inner join(join)關鍵字連接表(或者直接用where和“=”號)。
直接上例子:
設有表如下:
學生表:
班級表,對應學生表中的classid:
--自連接 :只返回兩張表連接列的匹配項。
--以下三種查詢結果一樣。
select * from student s inner join class c on s.classid=c.id;
select * from student s join class c on s.classid=c.id;
select * from student s,class c where s.classid=c.id;
自然連接結果:
內連接(自然連接)只匹配了符合條件的記錄。
二(外連接):
外連接分為左外連接、右外連接以及全外連接。
1、左外連接(左邊的表不加限制),用left out join(left join)關鍵字
還是舉例子,還是上述的表:
--左連接 :列出左邊表全部的,及右邊表符合條件的,不符合條件的以空值代替。
--在(+)計算時,哪個帶(+)哪個需要條件符合的,另一個全部的。即放左即右連接,放右即左連接。
--以下結果集相同。
select * from student s left join class c on s.classid=c.id;
select * from student s,class c where s.classid=c.id(+);
左外連接結果:
左外連接:列出右表符合條件的記錄以及左表全部的記錄,右表沒有符合的用null表示。
Oracle可以用(+)表示外連接,當(+)跟在一個表的屬性後面時,它表示哪個表需要符合條件。放在左邊表示右外連接,放在右邊表示左外連接。
2、右外連接(右邊的表不加限制),用right out join(right join)關鍵字
看下面sql語句:
--右外連接 :與左連接一樣,列出右邊表全部的,及左邊表符合條件的,不符合條件
--的用 空值 替代。
--(+)一樣,它的位置與連接相反。
select * from student s right join class c on s.classid=c.id;
select * from student s,class c where s.classid(+)=c.id;
右外連接結果:
右外連接跟左外連接相同,只是要求符合條件的表不同(右外連接要求列出左表符合條件的記錄)。
右外連接:列出左表符合條件的記錄以及右表全部的記錄,左表沒有符合的用null表示。
Oracle可以用(+)表示外連接,當(+)跟在一個表的屬性後面時,它表示哪個表需要符合條件。放在左邊表示右外連接,放在右邊表示左外連接。
3、全外連接(左右兩表都不加限制),用full out join(full join)關鍵字
還是舉例子:
--全連接 :產生M+N的結果集,列出兩表全部的,不符合條件的,以空值代替。
select * from student s full join class c on s.classid=c.id;
全外連接結果:
全外連接對兩邊的表都不加限制,列出左右兩表所有的記錄,沒有符合條件的用null替代。
【雖然我走得很慢,但我從來沒有後退。】