SQL多表連線 的種類

2021-10-09 14:01:14 字數 2003 閱讀 8703

多表連線的種類

根據結果集生成的規則不同,連線可以分為:

交叉連線

內連線內連線原理(一)

t1表和t2表做內連線,連線條件為on t1.c1=t2.c2,假設t1表做驅動表,t2表做匹配表,記錄的匹配過程如下

從t1表中讀取第一條記錄r1,若它的c1值為1

根據該值到t2表中查詢匹配的記錄,即需要遍歷t2表,從t2表中的第一條記錄開始,若該記錄(r1)的c2列的值等於1,我們就說這兩條記錄能夠匹配上,那麼t1的r1和t2的r1組合起來,作為結果集裡的一條記錄,否則檢測t2表的下一條記錄.

select a.real_name,b.os_username

from account a join service b

on a.id = b.account_id

因為a.id = b.account_id所以real_nameos_username也就是1對1了

select t1.real_name, t2.real_name

from account t1 join account t2

on t2.id=t1.recommender_id;

select t2.real_name "客戶"

,case

when t1.real_name=t2.real_name then

'沒有推薦人'

else t1.real_name end

from account t1 join account t2

on t1.id=nvl(t2.recommender_id,t2.id)

select

distinct a.real_name

from account a join account b

on a.id=b.recommender_id;

自連線

不同表有描述同一屬性的列,用on tabname1.colname1=tabname2.colname2 表達,那麼同一張表的不同列的取值有相同含義,記錄之間的關係又該如何表達?

外連線

from t1 left

outer

join t2

on t1.c1=t2.c2

t1驅動表,t2匹配表outer可以省略

select t1.real_name "客戶"

, t2.real_name "推薦人"

from account t1 join account t2

on t2.id=t1.recommender_id;

select t1.real_name "客戶"

, t2.real_name "推薦人"

from account t1 left

join account t2

on t2.id=t1.recommender_id;

外連線left會將沒有推薦人的客戶返回為推薦人為null

外連線原理(二)

t1表和t2表做外連線,連線條件為:

from t1 left

outer

join t2

on t1.c1=t2.c2

t1表必須做驅動表,t2表做匹配表:

外連線的結果集=內連線的結果集+t1表中匹配不上的記錄和一條null記錄(按t2表的結果)的組合

外連線的核心可以將t1中匹配不上的記錄(按on條件中t2中找不到對應的匹配記錄)找回來,即t1中的記錄乙個不少的出現在結果集中

外連線結果集的記錄數不一定是驅動表的記錄數

外連線語句的執行順序

SQL多表連線

oracle8 select a.b.from a,b where a.id b.id 相當於左聯接 select a.b.from a,b where a.id b.id 相當於右聯接 oracle9 支援以上的寫法,還增加了leftjoin right join等 select a.b.from...

SQL多表連線

1.內連線 查詢兩張表共有部分 等值連線 語法 select from 表a inner join 表b on a.key b.key 2.左連線 把左邊表的內容全部查出,右邊表只查出滿足條件的記錄 語法 select from 表a left join 表b on a.key b.key 3.右連...

SQL多表連線查詢

本文主要列舉兩張和三張表來講述多表連線查詢。新建兩張表 表1 student 截圖如下 表2 course 截圖如下 此時這樣建表只是為了演示連線sql語句,當然實際開發中我們不會這樣建表,實際開發中這兩個表會有自己不同的主鍵。一 外連線 外連線可分為 左連線 右連線 完全外連線。1 左連線 lef...