1.join和union區別
join 是兩張表做交連後裡面條件相同的部分記錄產生乙個記錄集,
union是產生的兩個記錄集(欄位要一樣的)並在一起,成為乙個新的記錄集 。
join用於按照on條件聯接兩個表,主要有四種:
inner join:內部聯接兩個表中的記錄,僅當至少有乙個同屬於兩表的行符合聯接條件時,內聯接才返回行。我理解的是只要記錄不符合on條件,就不會顯示在結果集內。
left join / left outer join:外部聯接兩個表中的記錄,幷包含左表中的全部記錄。如果左表的某記錄在右表中沒有匹配記錄,則在相關聯的結果集中右表的所有選擇列表列均為空值。理解為即使不符合on條件,左表中的記錄也全部顯示出來,且結果集中該類記錄的右表字段為空值。
right join / right outer join:外部聯接兩個表中的記錄,幷包含右表中的全部記錄。簡單說就是和left join反過來。
full join / full outer join:完整外部聯接返回左表和右表中的所有行。就是left join和right join和合併,左右兩表的資料都全部顯示。
join的基本語法:
select table1.* from table1 join table2 on table1.id=table2.id
sql寫法
內連線inner join:
select msp.name, party.name
from msp join party on party=code
或select msp.name, party.name
from msp inner join party on party=code
左連線left join :
select msp.name, party.name
from msp left join party on party=code
右連線right join :
select msp.name, party.name
from msp right join party on msp.party=party.code
全連線(full join):
select msp.name, party.name
from msp full join party on msp.party=party.code
union運算子
將兩個或更多查詢的結果集組合為單個結果集,該結果集包含聯合查詢中的所有查詢的全部行。union的結果集列名與union運算子中第乙個select語句的結果集的列名相同。另乙個select語句的結果集列名將被忽略。
其中兩種不同的用法是union和union all,區別在於union從結果集中刪除重複的行。如果使用union all 將包含所有行並且將不刪除重複的行。
union和union all的區別:
union 檢查重複
union all 不做檢查
比如 select 'a' union select 'a' 輸出就是一行 a
比如 select 'a' union all select 'a' 輸出就是兩行 a
2. 通過下面的例子,可以清晰的看出和理解2者的區別
例項1 典型的二表連線演示
假定有兩個表table1和table2,其包含的列和資料分別如表1.1和表1.2所示。
表1.1 table1資料庫表
columna
columnb
columnc
x1y1
z1x2
y2z2
x3y3
z3表1.2 table2資料庫表
columna
columnd
columne
x1d1
e1x2
d2e2
x3d3
e3table1和table2表共有的列為columna,如果通過columna列的值連線table1和table2兩個表,即連線條件為table1.columna=table2.columna,此時得到的連線結果如表1.3所示。
表1.3 連線table1和table2表
columna
columnb
columnc
columnd
columne
x1y1
z1d1
e1x2
y2z2
d2e2
x3y3
z3d3e3
上述連線過程的實現**可表示如下:select * from table1 join table2 on table1.columna=table2.columna
例項2 典型的二表記錄的union運算
假定有兩個表table3和table4,其包含的列和資料分別如表2.1和表2.2所示。
表2.1 table3資料庫表
columna
columnb
columnc
x1y1
z1x2
y2z2
x3y3
z3表2.2 table4資料庫表、
columna
columnd
columne
x4y4
z4x5
y5z5
x6y6
z6table3表和table4表具有相同的列結構,列數也要相同,列名可以不同,以第乙個表的列名為新錶的列名,因此可以使用union運算子連線兩個表的記錄集,得到的連線結果如表2.3所示。
表2.3 使用union連線table3表和table4表的記錄
columna
columnb
columnc
x1y1
z1x2
y2z2
x3y3
z3x4
y4z4
x5y5
z5x6
y6z6
上述連線過程的實現**可表示如下:select * from table3 union select *from table4
對比例項1和例項2,不難發現二者的區別。
關於SQL中Union和Join的用法
聯合兩個表,沒有重複 select e name from employees china union select e name from employees usa 聯合兩個表,允許重複 select e name from employees china union allselect e n...
sql中UNION和UNION ALL的區別
寫sql時我們經常會遇到需要把從多張表查詢的集果集進行合併。這時就用到了union。使用union或union all 時一定要保證查詢的列的一致性 不然sql會報錯。欄位不一致的話可以用單引號來佔位。例 select t102.ci id as res id,t102.citype id asre...
sql 中union和union all的區別
union在進行表求並集後會去掉重複的元素,所以會對所產生的結果集進行排序運算,刪除重複的記錄再返回結果。union all則只是簡單地將兩個結果集合並後就返回結果。因此,如果返回的兩個結果集中有重複的資料,那麼返回的結果就會包含重複的資料。從上面的對比可以看出,在執行查詢操作時,union all...