SQL使用 聯合查詢

2021-09-11 04:09:28 字數 3414 閱讀 5722

a表

b表

c表

內連線(inner join)

內連線:僅顯示兩個表中匹配行,即兩表中都有才顯示。

sql如下:

select a.id as aid, a.content as acontent, b.id as bid, b.content as bcontent

from a

inner

join b on

(a.id = b.id)

由查詢結果可以看出,內連線根據連線條件(a.id=b.id)查詢出了a、b兩表中都存在的資料資訊。2個表的聯合查詢結果如此,那麼3個表甚至更多表聯合查詢的結果呢?

a、b、c三表聯合內查詢sql

select a.id as aid, a.content as acontent, b.id as bid, b.content as bcontent, c.id as cid, c.content as ccontent

from a

inner

join b on

(a.id = b.id)

inner

join c on

(a.id = c.id)

為什麼會多了一行資料?不用驚訝,其實c表中有2個id為1的記錄,然而我們怎麼理解得到的查詢結果呢?

可以把a、b兩表的查詢結果作為t表(中間結果表),然後t表內連線c表,連線條件為t.a.id=c.id。

簡單來說n(n>=2)都可以看做兩張表的聯合查詢,後面的小節將只介紹兩個表的聯合查詢。

外連線(outer join)

左外連線(left outer join)

左外連線:左表有就顯示,不論右表。

sql:

select a.id as aid, a.content as acontent, b.id as bid, b.content as bcontent

from a

left

join b on

(a.id = b.id)

左連線並不是把b表左連線到a表上,而是把a表作為基準表。由查詢結果可以看出,a、b兩表左連線,只要a中有結果,無論b表中有無結果,都會被查詢出來。

右外連線(right outer join)

右外連線:右表有就顯示,不論左表。

sql:

select a.id as aid, a.content as acontent, b.id as bid, b.content as bcontent

from a

right

join b on

(a.id = b.id)

右連線和左連線類似,只是把b表(連線的表)作為基準表。由查詢結果可以看出,無論a表是否存在其他資料,只要b表資料存在就會被查詢出來。

全外連線(full outer join)

全外連線:左表/右表,有乙個有就顯示。

sql:

select

a.id as aid,

a.content as acontent,

b.id as bid,

b.content as bcontent

from

afull

join b on

(a.id = b.id)

;

全外連線查詢就字面意思也不難看出是查詢出兩表(a、b)中的所有記錄資訊。

注:mysql中不支援全外連線(但是可以union來實現,後面會介紹)。

交叉連線(cross join)

sql:

select a.id as aid, a.content as acontent, b.id as bid, b.content as bcontent

from a

cross

join b

查詢結果:

由結果可以看出,交叉連線是對a、b量表進行笛卡爾積的結果查詢出來。即a的每條記錄都有和b中所有記錄相對應的資訊。

sql union

sql union用於將多個select結果集進行合併。值得注意的是,union 內部的 select 語句必須擁有相同數量的列。列也必須擁有相似的資料型別。同時,每條 select 語句中的列的順序必須相同。

sql:

select

*from a union

select

*from b

union是把2個select結果集進行合併,由查詢結果也不難看出,a、b兩表的結果資料進行了合併,並且都被查詢出來了。

如果2個select結果集中存在相同的結果,用union則會把相同的記錄進行合併,查詢結果中僅僅會顯示一條。那麼如果想都顯示出來,把union換成union all 即可。

union實現full outer join:

首先獲取a、b表中id的不同組合。

sql:

create

view v as

select a.id

from a

union

select b.id

from b

以檢視v為基本表,left join a、b表即可。

sql:

select a.id, a.content, b.id, b.content

from v

left

join a on

(a.id = v.id)

left

join b on

(b.id = v.id)

SQL 聯合查詢

use xsgl go select from student select from cause select from exam 聯合查詢 join on 預設為inner,如果有right or left 那麼就指的是外聯,outer 可以不寫 1.最長見為內聯 table1 inner jo...

sql聯合查詢

sql查詢 多表聯合查詢 將具有相同的字段的查詢結果合併為乙個表 關鍵字 union 例項 查詢subs表 select subs id,prefix,acc nbr,cust id,user id,acct id,price plan id,area id,update date from sub...

SQL 聯合查詢

a表 aaa bbb ccc 1a 1b 1c 2a 2b 2c 3a 3b 3c b表 aaa bbb ddd 1a 1b 1d 4a 4b 4d 1 union union all all 表示將查詢的所有結果都合併到結果集中,若不加all會將重複的行只保留一行 sql view plain c...