sql 用union合並合並查詢結果


合並操作與連接相似,因為他們都是將兩個表合並起來的另一個表的方法,然而他們的合並方法有本質的區別,

合並是兩個表的相加,連接時時兩個表的相乘;

01 在合並中兩個表原列的數量與數據類型必須相同;在連接中一個表的行可能與另一個表的行有很大的區別,結果表列可能來自第一個表,第二個表或者是兩個表的都有;

02在合並中行的最大數量是和 在連接中行的最大數量是積

select name,sex from [user] union select chinese,english from score

 

使用union all 加上關鍵字all 功能是不刪除重復行也不對進行自動排序加上all 關鍵字需要計算資源少所以盡可能的使用它 尤其是處理大型表的時候 下列情況應使用union all情況

union加上關鍵字:

01 知道有重復行但是想保留這些行,

02 知道不可能有重復行,

03 不在乎是否用重復行

select name,address,phone,sex from [user] where age>20 union all select name,address,phone,sex from [user] where sex='男'

Union 中的order by子句

合並表時有且只有一個order by 子句並且必須將它放置語句的末尾 他的兩個select 語句都提供了用於合並所有行的排序下面的order by子句可以使用排序依據

01 來自第一個select子句別名

02 來自第一個select子句列別名

3 union 中列的位置編號

前兩種更常用、更容易理解。

select name,address,phone,sex from [user] where age>20 union all select name,address,phone,sex from [user] where sex='男'
order by address

union中的自動類型轉化:

在合並表的時候兩個標源中對應的每個列數據類型必須相同嗎 答案是不是的 但是需要數據兼容

首先說文本數據類型 假設合並的兩個表源中的第一列數據類型都是文本類型 但長度不一致黨合並表時字符長度短的列等於字符長度長的列的不會丟失數據

其次說數值類型當合並兩個表源中第一個列數據類型是數值類型的時候但長度不同在合並表的時候所有數字保持所有數字都允許的長度來消除他們數據類型的差別

因為這種都是自動數據類型的轉化 所以說任何兩個文本都是兼容的 任何數字列都是兼容的

不同類型表的union

當合並的表的時候 兩個表源的對應的列即使數據類型也不一定致命 這時候要借助於數據類型轉化函數

當合並兩個表源相對應的列數據類型不一致一個數值型一個字符型 如果數值型的被轉化成為本類型完全可以合並兩個表

use student

select 姓名,性別 from student

union

select 學號,str(學期) from grade

有不同列數的兩個表union

當合並兩個表源的列數不同 只要向其中一個標源列添加就行了 就可以使得兩個表源的列數相同

use student

select 姓名,性別,年齡 from student

union

select 課程代號,課程內容,null from course

三個或者更多的表union

可以把很多數量的表合並起來表的數量可以達到10個之多 然還是要尊徐一定的規則

use student

select 姓名,性別 from student

union

select 課程代號,課程內容 from course

union

select 學號,課程代號 from grade


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM