SQL 聯合查詢

2021-06-27 20:43:37 字數 2816 閱讀 9533

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

copy

print?

select

* from

a union

select

* from

b  

結果:(查詢的字段數相同)

結果:(重複的記錄被覆蓋)

[sql]view plain

copy

print?

select

aaa,bbb 

from

a union

allselect

aaa,bbb 

from

b  

結果:(加上all,允許重複的行)

2、join

連線分為內連線、外連線、交叉連線

2.1、內連線 inner join (預設的連線方式)

只有至少有(指定的字段)一行的記錄在兩個查詢表中都有記錄,此時才有結果集。即返回兩個表之間的交集(相同欄位的記錄)

[sql]view plain

copy

print?

select

* from

`a` 

inner

join

b on

a.aaa = b.aaa  

結果:(兩表有相同的字段的值的記錄,會將字段連線起來,而不是union,將結果追加到記錄的結果集後)

2.2、外連線

a、left join 左連線

返回查詢表的記錄,包含左邊表的所有記錄,如果左邊表中的記錄在右邊表中沒有對應的記錄,則所返回右邊表的字段結果為空(差集)

[sql]view plain

copy

print?

select

* from

`a` 

left

join

`b` 

ona.aaa = b.aaa  

結果:(b表沒有的字段的值為空null)

b、right join 右連線

與left join相反,查詢的記錄包含右邊表的所有記錄,如果右邊表中的記錄在左邊表中沒有對應的記錄,則返回左邊表的字段值為空(差集)

[sql]view plain

copy

print?

select

* from

`b` 

left

join

`a` 

ona.aaa = b.aaa  

結果:(a表沒有的字段值為空null)

c、full join 全連線

返回左表和右表中的所有記錄,即兩表的資料全部顯示

[sql]view plain

copy

print?

select

* from

a full

join

b  

結果:(返回所有的記錄)

3、cross in 交叉連線

不帶where子句,返回兩個表中所有笛卡爾積,記錄數為a表和b表記錄數的積

[sql]view plain

copy

print?

select

* from

`b` 

cross

join

`a`  

結果:

[sql]view plain

copy

print?

select

* from

`a` 

cross

join

`b`  

結果:

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 聯合查詢

概述 聯合查詢效率較高,舉例子來說明聯合查詢 內聯inner join 左聯left outer join 右聯right outer join 全聯full outer join 的好處及用法。聯合查詢效率較高,以下例子來說明聯合查詢 內聯 左聯 右聯 全聯 的好處 t1表結構 使用者名稱,密碼 ...