資料庫關鍵字Union和Union All的區別

2021-09-25 14:54:12 字數 3707 閱讀 5632

sql 的union操作符合併兩個或者多個select語句的結果.

請注意:union內部的每個select語句必須擁有相同數量的列,且列必須有相似的資料型別,同時select語句中列的順序必須相同.

建表語句:

建表語句:

create table `table2`(

`id` int(2

)auto_increment primary key,

`name`varchar(2

),`age`int(2

))insert into table2 values

('1'

,'a'

,'2');

insert into table2 values

('2'

,'b'

,'5');

insert into table2 values

('3'

,'c'

,'2');

insert into table2 values

('4'

,'d'

,'3'

);

eg:

1.1:執行sql

select age from table1

union

select age from table2

1.2:結果

結論:預設地union操作符作查詢操作查詢的值不得重複.不區分大小寫.如果允許有重複的值請使用union all

2.1:執行sql

select age from table1

union

select `name` from table2

2.2:結果

結論:union操作列名總是等於union中第乙個select中的列名

3.1:union和union all查詢出的結果預設都不會進行排序,上面展示的資料貌似排序但是只是資料碰巧故此做出以下數的改變來證名我們的觀點

3.1.1:將表一的第二條記錄的age欄位進行調整如下

3.1.2:執行sql

select `age` from table1

union

select `age` from table2

3.1.3:結果

3.1.4:結論:union操作後不會自動進行排序

4.1:union操作如何排序

4.1.1:執行sql

select `age` from table1

union

select `age` from table2 order by age

4.1.2:結果

注意1:order by後面根據哪個字段排序,此欄位必須是在union連線的select中都存在的字段.且兩個表中都必須存在此欄位.

驗證注意1:

table1新增***字段

執行sql

select `age`,`***` from table1

union

select `age` from table2 order by ***

結果: 報錯—>unknown column 『***』 in 『field list』

table2新增***字段

執行sql

select `age` from table1

union

select `age` from table2 order by ***

結果: 報錯—>unknown column 『***』 in 'order clause

原因是要在select 後面加上分組的字段

select `age`,`***`  from table1

union

select `age`,`***` from table2 order by ***

結果:

證實了***注意1***

4.2:union操作多欄位如何排序

前面我們說了union操作查詢的值不重複,但是從上面看按照***分組為女男男男,有三個男有重複的值.

注意2:此時的重複值判斷標準是按照查詢出的字段聯合判斷的重複值,而並非通過某乙個字段進行重複的判斷.

證實注意2:

table1新增score欄位

table2新增score欄位

執行sql

select `age`,`***`,`score` from table1

union

select `age`,`***` ,`score` from table2 order by score

結果

證實了注意2

根據score分組,union雖然select出的值沒有重複,它是根據age+***+score三個字段聯合來判斷是否是重複的值.而非某乙個欄位來判斷重複的值.

union all 同union的上部分的那些特性一致,只是它select出來的會有重複的值.

資料庫分頁關鍵字

mysql分頁採用limt關鍵字 select from t order limit 5,10 返回第6 15行資料 select from t order limit 5 返回前5行 select from t order limit 0,5 返回前5行 mssql 2000分頁採用top關鍵字 ...

C語言union關鍵字

union 關鍵字的用法與struct 的用法非常類似。union 維護足夠的空間來置放多個資料成員中的 一種 而不是為每乙個資料成員配置空間,在union 中所有的資料成員共用乙個空間,同一時間只能儲存其中乙個資料成員,所有的資料成員具有相同的起始位址。例子如下 union statemachin...

C語言union關鍵字

今天看union,不是很記得其作用了。本文摘自c語言中文網,解釋的很好,學到了東西。union 維護足夠的空間來置放多個資料成員中的 一種 而不是為每乙個資料成員配置空間,在union 中所有的資料成員共用乙個空間,同一時間只能儲存其中乙個資料成員,所有的資料成員具有相同的起始位址。例子如下 uni...