1. 程式人生 > >資料庫常用操作回顧三

資料庫常用操作回顧三

接著上次的常用操作二補充涉及多個表的查詢。首先用一個問題引導情景,目前有兩個表,分別是用於存放教學安排資訊的teaches表和用於存放課程資訊的course表,表結構描述如下:

teaches_table
這裡寫圖片描述

course_table
這裡寫圖片描述

現在要查詢在夏季(summer)開課的課程名稱(title),這兩個屬性跨越的兩個表,因此就需要將兩個表連線起來後在進行查詢。

常用的表連線方式有兩種,分別是等值連線和外連結

需要注意的是查詢語句中‘列名’要改為用’表名.列名‘的形式書寫,這樣可以避免出現兩個表中其他相同列名的衝突。
1.等值連線
等值連線即用兩個表中相同的列名將同名列(連線欄位)

中值相等的元組連線起來,然後去掉兩個表中未能連線的元組
select <表名.列名1>, <表名.列名2>…
from 表1, 表2…
where 表1.連線欄位=表2.連線欄位 and 表2.連線欄位=表3.連線欄位…
這裡寫圖片描述

2.外連線
等值連線會去掉為連線的元組,在外連線中則會講沒有連線的元組保留下來,並在連線表的屬性填上空值。
這裡需要用到三個新的關鍵字:
left outer join on:列出左邊表的所有元組
inner join on:列出兩個表都有的元組
right outer join on:列出右邊表的所有元祖

select <列名1>, <列名2>…
from <表1>
left outer join | right outer join | inner join <表2>
on (表1.關鍵欄位=表2.關鍵欄位)

自身連線
有些時候資料表會需要與本身相連線,這種情況一般會出現表中有同性質但不同名的屬性的現象。比如一下的表結構:course(number(課程編號), name(課程名), p_no(前置課程編號)),其中前置課程的值域和課程編號的值域是相同的。
這個時候要求查詢所有課程和它的前置課程的前置課程則需要用到自身連線。
select A.number, B.p_no
from course A, course B
where A.p_no=B.number
這裡其實根本上還是運用了等值連線的方法,只是給原來的同一個表取了兩個別名然後再連線起來。