1. 程式人生 > >四、sql基礎:多表關聯查詢--【Oracle資料庫】

四、sql基礎:多表關聯查詢--【Oracle資料庫】

####四、多表關聯查詢
#####4.1聯合查詢–等於連結–示例
員工表(員工id, 員工姓名,部門id)
部門表(部門id, 部門名稱)
要查詢員工id、姓名、部門名稱:

select 員工表.員工id, 員工表.員工姓名, 部門表.部門姓名
	from 員工表,部門表
	where 員工表.部門id = 部門表.部門id;

#####4.2 聯合查詢–不等連結–示例
員工表(員工id, 員工姓名, 員工薪水)
薪水錶(薪水等級,最低薪水,最高薪水)
要查詢員工姓名、員工薪水、薪水等級:

select 員工表.員工姓名,員工表.員工薪水,
	薪水錶.薪水等級
	from 員工表,薪水錶
	whree 員工表.員工薪水 between 薪水錶.最低薪水 and 薪水錶.最高薪水;

#####4.3 聯合查詢–外連結(左、右連線)–示例
看4.1,當員工表中有一個員工的部門id是空,那麼4.1查詢出來的結果就沒有該員工的資訊,因為部門id(null)在部門表中找不到相對應的部門資訊,所以他就不顯示。

外連線解決了這一問題,使用外連線之後,可以顯示所有員工的資訊:–右連結

	select 員工表.員工id, 員工表.員工姓名, 部門表.部門姓名
		from 員工表,部門表
		where 員工表.部門id = 部門表.部門id(+);

我們要顯示所有的員工資訊,那麼就在另一張表後加(+)

這樣一旦某個員工沒有部門,就會顯示:
	-------------------------------
	| 員工姓名 | 部門id | 部門名稱 |
	-------------------------------
	|  zhao    |  10    |    IT    |
	-------------------------------
	|  tai     |        |          |
	-------------------------------

那我們要顯示所有的部門資訊呢?萬一這個部門下沒有員工呢?–左連線

	select 員工表.員工id, 員工表.員工姓名, 部門表.部門姓名
		from 員工表,部門表
		where 員工表.部門id(+) = 部門表.部門id;
	-------------------------------
	| 員工姓名 | 部門id | 部門名稱 |
	-------------------------------
	|  zhao    |  10    |    IT    |
	-------------------------------
	|          |   11   |   HR     |
	-------------------------------

#####4.4 聯合查詢–自連結–示例
員工表(員工id, 員工姓名,員工上級id)
這裡需要注意,員工上級也在員工表中!
要查詢員工id, 員工姓名,員工上級姓名:

	select 員工表.員工id,員工表.員工姓名,上級.員工姓名
		from 員工表,員工表 上級
		where 員工表.員工上級id = 上級.員工id;