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`
結果: