SQL UNION 和 UNION ALL 操作符


總結一下SQL中的連接運算符!union和union all都是用來連接SQL 查詢語句的!

要點一:UNION 內部的 SELECT 語句必須擁有相同數量的列。列也必須擁有相似的數據類型。同時,每條 SELECT 語句中的列的順序必須相同,就比如,第一條語句查詢的是姓名和年齡分別是nvarchar和int類型的,那么聯合的語句查詢的字段也應該是同樣的類型,和順序。

要點二:默認地,UNION 操作符選取不同的值(就是加載的都不一樣,不會有重復的數據,如果有兩條數據一模一樣,就只會出現一條數據)。如果想得到所有數據,請使用 UNION ALL(ALL不就是所有的意思嘛!)

要點三:UNION 查詢結果集中的列名總是等於 UNION 中第一個 SELECT 語句中的列名,意思就是兩條語句查詢的總數據的列名按照第一條查詢語句走,比如兩條查詢的字段都一樣,但是第一條查詢語句把字段重新命名了(select Name as 姓名 from 表),這時第一列的名字就不是Name了,而是被重新命名的:“姓名”。

代碼實例:

這里用兩張表,一張學生表 一張教師表!字段分別是:主鍵  姓名(老師或學生)年齡 生日。

 

代碼語法:

SELECT SName,Age from DB_Students  --第一條語句查詢學生的姓名和年齡
union
SELECT TName,Age from DB_Teachers  --第二條語句查詢老師的姓名和年齡

運行結果:

查詢到結果是:學生所有數據和老師所有數據,可以看出,老師學生總數據的一列的列名為SName,因為第一條查詢語句用的SName。下邊將數據修改一下,讓有重復的數據,再用上邊代碼執行看結果

將兩張表都修改一條數據為:姓名為:小明,年齡為:15,但結果只出現一條小明的數據。

 

 

結果為:

聯合的兩個語句,類型要相同,順序要相同,如果不相同,就無法執行,看代碼:

SELECT SName,Age,Bitthday from DB_Students  --第一條語句查詢學生的姓名和年齡和生日
union
SELECT TName,Age from DB_Teachers  --第二條語句查詢老師的姓名和年齡

報錯:

union會去重,union all不會,看代碼:

SELECT * FROM DB_Students
SELECT * FROM DB_Students

兩條同樣的語句,查詢全表,但是如果用union連接,就會只出現三條數據:

SELECT * FROM DB_Students
union
SELECT * FROM DB_Students

而如果用union all的話就還會出現六條數據,在效率上union all肯定要比union高的,因為少了去重這一步!

 


免責聲明!

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



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