表連線總結

2021-04-19 23:57:25 字數 3349 閱讀 4409

通過連線運算子可以實現多個表查詢。連線是關聯式資料庫模型的主要特點,也是它區別於其它型別資料庫管理系統的乙個標誌。連線型別可分為三種:內連線、外連線和交叉連線。下面分別介紹連線型別及特點。

例項表buyer (buyer_id, buyer_name)

sales (sales_id, buyer_id, qty)

一、內連線(inner join)

需要使用比較運算子(即需要on關鍵字及條件); 列出兩個表中所有匹配的的記錄(等值連線時查詢結果只顯示可以匹配的記錄);

舉例:

buyer:

(1, n1)

(2, n1)

(3, n1)

(4, n1)

sales:

(1, 1, 100)

(2, 2, 99)

(3, 3, 98)

(4, 4, 97)

(5, 5, 96)

(6, 1, 23)

等值連線時結果只有5條記錄;(4, 5, 96)因為沒有與之關聯的專案不出現在查詢結果;同樣如果buyer中增加一條(10, n10)記錄,sales表中沒有與之對應的專案同樣不出現在查詢結果.

內連線分為三種:

a、等值連線:在連線條件中使用等於號(=)運算子比較被連線列的列值,其查詢結果中列出被連線表中的所有列,包括其中的重複列。

b、不等連線: 在連線條件使用除等於運算子以外的其它比較運算子比較被連線的列的列值。這些運算子包括》、>=、<=、<、!>、!《和<>。 (當不等連線時使用笛卡爾積計算結果)

c、自然連線:在連線條件中使用等於(=)運算子比較被連線列的列值,但它使用選擇列表指出查詢結果集合中所包括的列,並刪除連線表中的重複列。

使用自然連線,在選擇列表中刪除authors 和publishers 表中重複列(city和state):

select a.*,p.pub_id,p.pub_name,p.country

from authors as a inner join publishers as p

on a.city=p.city

二、外連線(left outer join,或left join, right outer join,或right join, full outer join,或full join)

需要使用比較運算子;

a、左連線時(連線條件中使用等於號)顯示左表與左表可以關聯的所有記錄+左邊沒有與右表關聯的記錄(這時有表的字段顯示為null)

舉例:

buyer:

(1, n1)

(2, n1)

(3, n1)

(10, n10)

sales:

(1, 1, 100)

(2, 2, 99)

(3, 3, 98)

(4, 4, 97)

(5, 2, 96)

(6, 1, 23)

結果:(1, n1)(1, 1, 100)

(1, n1)(6, 1, 23)

(2, n1)(5, 2, 96)

(2, n1)(2, 2, 99)

(3, n1)(3, 3, 98)

(10, n10)(null, null, null)

b、右連線時(連線條件中使用等於號)顯示左表與右表可以關聯的所有記錄+右邊沒有與右表關聯的記錄(這時有表的字段顯示為null)

舉例:

buyer:

(1, n1)

(2, n1)

(3, n1)

(10, n10)

sales:

(1, 1, 100)

(2, 2, 99)

(3, 3, 98)

(4, 4, 97)

(5, 2, 96)

(6, 1, 23)

(7, 5, 97)

結果:(1, n1)(1, 1, 100)

(1, n1)(6, 1, 23)

(2, n1)(5, 2, 96)

(2, n1)(2, 2, 99)

(3, n1)(3, 3, 98)

(null, null)(4, 4, 97)

(null, null)(7, 5, 97)

c、完整連線時,不管另乙個表是否有匹配的值,此運算子都包括兩個表中的所有行。

舉例:

buyer:

(1, n1)

(2, n1)

(3, n1)

(10, n10)

sales:

(1, 1, 100)

(2, 2, 99)

(3, 3, 98)

(4, 4, 97)

(5, 2, 96)

(6, 1, 23)

(7, 5, 97)

結果:(1, n1)(1, 1, 100)

(1, n1)(6, 1, 23)

(2, n1)(5, 2, 96)

(2, n1)(2, 2, 99)

(3, n1)(3, 3, 98)

(10, n10)(null, null, null)

(null, null)(4, 4, 97)

(null, null)(7, 5, 97)

三、交叉連線(cross join)

不能使用比較運算子;它返回被連線的兩個表所有資料行的笛卡爾積,返回到結果集合中的資料行數等於第乙個表中符合查詢條件的資料行數乘以第二個表中符合查詢條件的資料行數。例,titles表中有6類圖書,而publishers表中有8家出版社,則下列交叉連線檢索到的記錄數將等於6*8=48行。

四、注意點

a、sql使用outer join查詢,使用where與and的區別。

join的原理是先執行on後面條件對錶進行篩選;然後連線兩個表;最後對連線後的結果使用where條件進行篩選。

五、應用

a、使用自連線查詢最大值或最小值

最小值:select distinct t1.qty from sales as t1 where not exists

(select t2.buyer_id from sales as t2 where t1.buyer_id = t2.buyer_id

and t1.qty > t2.qty)

最大值:select distinct t1.qty from sales as t1 where not exists

(select t2.buyer_id from sales as t2 where t1.buyer_id = t2.buyer_id

and t1.qty > t2.qty)

mysql表連線總結

首先my sql 不支援oracle的 內連線 只連線匹配的行 左外連線 包含左邊表的全部行 不管右邊的表中是否存在與它們匹配的行 以及右邊表中全部匹配的行 右外連線 包含右邊表的全部行 不管左邊的表中是否存在與它們匹配的行 以及左邊表中全部匹配的行 全外連線 包含左 右兩個表的全部行,不管另外一邊...

資料庫表連線總結

表連線的共性 第一步均為將所有參與操作的表進行了乙個笛卡兒積,然後才依據各連線條件進行記錄的篩選。一 笛卡爾積 交叉連線 交叉連線的兩種方式,得到的結果為笛卡爾積形式 隱式交叉連線 select from student,score 顯示交叉連線 select fromstudent cross j...

Oracle表的連線查詢總結

關鍵字 inner join join 所謂內部鏈結也可以稱為簡單連線,它連線兩個或多個表,只返回符合連線條件的行。下面通過 進行簡單示例 表tablel1 columna columnb columnc x1y1 z1x2 y2z2 x3y3y3 表tablel2 columna columnd ...