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會將重複的行只保留一行

select * from a union select * from b
結果:(查詢的字段數相同)

select aaa,bbb from a union select aaa,bbb from b

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



select aaa,bbb from a union all select aaa,bbb from b
結果:(加上all,允許重複的行)

2、join

連接分爲內連接、外連接、交叉連接

2.1、內連接 inner join (默認的連接方式)

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

SELECT * FROM  `a` INNER JOIN b ON a.aaa = b.aaa
結果:(兩表有相同的字段的值的記錄,會將字段連接起來,而不是union,將結果追加到記錄的結果集後)

2.2、外連接

a、left join 左連接

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

SELECT * FROM  `a` LEFT JOIN `b` ON a.aaa = b.aaa
結果:(b表沒有的字段的值爲空NULL)

b、right join 右連接

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

SELECT * FROM `b` LEFT JOIN `a` ON a.aaa = b.aaa

結果:(a表沒有的字段值爲空NULL)


c、full join 全連接

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

select * from a full join b

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


3、cross in 交叉連接

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

SELECT * FROM  `b` CROSS JOIN `a`
結果:


SELECT * FROM  `a` CROSS JOIN `b`
結果:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章