SQL中JOIN和UNION區別 用法及示例

2021-09-08 03:15:19 字數 2998 閱讀 6377

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...