關係型資料庫中允許表和表之間存在關係,這種關係可以把兩個甚至多個表的資料聯絡在一起。利用這種關係,可以查詢出某種符合條件的資料,這些資料將是一套符合實際業務邏輯的資料,而資料中這些表和表之間的關係將不存在。換句話說,獲取真實世界的原始資料後,根據某種規則吧它們拆分成各種獨立的資料,加入想從資料庫中再次獲取資料,那麼需要依靠當初拆分的規則。而這種規則也可以看成表和表之間的聯絡,要再次實現這種聯絡,需要用到連線查詢。連線分為內連線、外連結和全連線,還有一種叫做自連線,其中最常用的是內連線和外連線。
1、最簡單的連線查詢
最簡單的邏輯查詢是利用逗號完成的,它利用逗號把FROM後的表名分隔開,這就構成了最簡單的邏輯查詢。但這樣做的意義不大。
例如:teacher表中有4行,course表中有4行,
使用 SELECT te.*,co.* FROM teacher te , course co 則返回一個有16行的表。
利用這種方式查詢資料將得到兩個表的笛卡爾積,也就是得到兩個表中記錄數的乘積。而這麼做沒什麼意義。關於笛卡爾積,就是一個表中的每一行與另一個表中的每一行連線在一起而形成的新表,也就是查詢結果。查詢結果的記錄數就是這兩個記錄數的乘積。
2、內連線
內連線也稱為簡單連線,它會把兩個或多個表進行連線,只能查詢出匹配的記錄,不匹配的記錄將無法查詢出來,這種連線查詢是平時常用的查詢。內連線中最常用的就是等值連線 和不等值連線。
(1)等值連線:連線條件中使用“=”連線兩個條件列表。
SELECT te.*,co.* FROM teacher te ,course co where te.tno= co.tno
SELECT te.*,co.* FROM teacher te INNER JOIN course co ON te.tno= co.tno
這兩段指令碼的功能是一樣的。只是寫法不同
(2)不等值連線:是指連線條件中使用>,<,<=,>=,!=,between...and ,in 等連線兩個條件列表,但這種方式通常需要和其它等值運算一起使用,否則檢索出的資料很可能沒有實際意義
內連線中的關鍵字inner join 可以直接寫成 join,系統會把join識別成內連線。但是on關鍵字不能省略。
3、自連線
所謂自連線,就是把自身表的一個引用作為第二個表來處理,這樣就會獲取表內一些特殊的資料。
例如:獲取主鍵列不同,而其它列相同的內容。獲取表PRODUCTINFO中數量相同的不同產品。
select p.productname, p.productrice, p.quantity
from productinfo p, productinfo pr
where p.productid != pr.productid and p.quantity = pr.quantity
4、外連線
外連線分為左外連線、右外連線和全外連線。它們所表示的含義:
- 左外連線:又稱為左向外連線。使用左外連線的查詢,返回的結果不僅僅符合連線條件的記錄,還包含了左邊表中的全部記錄。也就是說,如果左邊的某行記錄在右邊表中沒有匹配項,則在返回結果中右表的所有選擇列表項都為空。
- 右外連線:又稱為右向外連線。它與左外連線相反,將右邊表中所有的資料與左邊進行匹配,返回的結果除了匹配成功的記錄,還包含了右表中未匹配成功的記錄,並在其左表對應的列補空值。
- 全外連線:返回所有匹配成功的記錄,並返回左表未匹配成功的記錄,也返回右表未匹配成功的記錄
(1)左外連線
示例 :檢索出productinfo表中每個產品對應的產品型別名稱。
select p.productname, p.productprice, p.category,c.categoryid, c.categoryname
from productinfo p left join categoryinfo c on p.category = c.categoryid ;