17、多表連線查詢
學習目標:
1、掌握自然連線、左外連線、右外連線和全連線的概念
2、掌握Oracle對自然連線、左外連線、右外連線和全連線的語法的支援
3、熟練掌握多表連線查詢
學習過程:
有時候我們需要從多張表中獲取資料,select語句支援一次性查詢多張表,這些表在記憶體中會做一個“乘法”操作。兩個表如何相乘呢?我們看看那下面這個例子。
比如現在有兩張表,員工表和部門表
如果這兩張表做一個乘法運算,那麼結果如下:
一、內連結查詢
現在我們要查詢,查詢所有部門的員工資訊,要求顯示部門名稱,員工名稱,工資等資訊,因為部門名稱儲存在部門表中,其他資訊儲存在員工表中,所以我們需要一次性的查詢兩個表,程式碼如下:
1 2 |
|
這樣得到的結果就是部門表和員工表的一個乘法結果,其中部門的id和員工的所屬部門的外交id是對不上的,所以我們新增一個條件判斷,就是主鍵=外來鍵,這樣就可以得到正確的資料了。修改上面的查詢語句。
1 2 |
|
得到結果如下:
多表查詢可以是多張表的,比如下面這個例子,需要查詢四張表,才可以得到員工每門課程的對應的成績。
1 2 3 4 |
|
結果如下:
二、外鏈查詢
主要有左外連線,右外連線和全連線。
左外連線:指定的左表的所有行,而不僅僅是聯接列所匹配的行。如果左表的某行在右表中沒有匹配行,則在相關聯的結果集行中右表的所有選擇列表列均為空值。
右外連線:其實和左外連線差不多。右向外聯接是左向外聯接的反向聯接。將返回右表的所有行。如果右表的某行在左表中沒有匹配行,則將為左表返回空值。
全連線:完整外部聯接返回左表和右表中的所有行。
oracle有自己的一套實現外連結的語法格式,這些語法格式有別於標準的sql語句,相對來說比較容易一點。下面兩個我們都介紹一下:
首先我們現在員工表插入一條部門外來鍵為空的資料。
然後在部門表,新增一條沒有任何員工是該部門的資料。
1、左外連線示例如下:
1 2 3 4 5 6 7 |
|
結果如下:
右外連線示例如下:
1 2 3 4 5 6 |
|
結果如下:
全連線示例如下:
1 2 3 4 5 6 7 8 9 10 |
|