LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

sqlserver UNION / UNION ALL 合并查询

freeflydom
2023年5月29日 10:32 本文热度 388

演示使用如下两张表:

create TABLE #UserInfo (ID INT IDENTITY(1,1),UserAddress NVARCHAR(50),UserName NVARCHAR(50),EntryDate DATETIME)


insert INTO #UserInfo

        ( UserAddress, UserName, EntryDate )

VALUES  ( N'北京',N'Joey', '2015-04-12'),

        ( N'上海',N'John', '2013-04-23'),

        ( N'郑州',N'Mery', '2012-03-17'),

        ( N'深圳',N'Anna', '2014-05-07'),

        ( N'合肥',N'Dave', '2011-01-12'),

        ( N'西安',N'Alex', '2012-03-03')



create TABLE #UserOrder (ID INT IDENTITY(1,1),UserName NVARCHAR(50),Amount INT ,Price float)


insert INTO #UserOrder

        ( UserName, Amount, Price )

VALUES  ( N'Joey', 30,200),

        ( N'John', 20,120),

        ( N'Mery', 70,231),

        ( N'Anna', 10,201),

        ( N'Dave', 5,12),

        ( N'Alex', 98,1200)

合并查询的特点

1.合并表中的列的个数、数据类型必须相同或相兼容

--案例1

select UserAddress, UserName, EntryDate from #UserInfo

union


select Amount, UserName from #UserOrder

-----结果 列数个数不相等

消息 205,级别 16,状态 1,第 33 行

使用 union、INTERSECT 或 EXCEPT 运算符合并的所有查询必须在其目标列表中有相同数目的表达式。

--案例2

select UserAddress, UserName, EntryDate from #UserInfo

union


select Amount, UserName,Price from #UserOrder


------结果,数据类型不相同或不兼容

消息 245,级别 16,状态 1,第 33 行

在将 nvarchar 值 '北京' 转换成数据类型 int 时失败。

保证数据类型相同我们需要进行转换:

--案例  只是更加清晰理解union的使用方法,实际项目此类转换无意义

select UserAddress, UserName, EntryDate from #UserInfo

union


select CONVERT(NVARCHAR, Amount), UserName,CONVERT(datetime, Price) from #UserOrder

2.union 默认去掉重复值。如果允许有重复值,请使用union ALL

--案例1

select UserAddress, UserName, EntryDate from #UserInfo

union


select CONVERT(NVARCHAR, Amount), UserName,CONVERT(datetime, Price) from #UserOrder


union


select UserAddress, UserName, EntryDate from #UserInfo


---结果只有12行,说明去掉重复值了

--案例2,改为union ALL 显示所有

select UserAddress, UserName, EntryDate from #UserInfo

union ALL


select CONVERT(NVARCHAR, Amount), UserName,CONVERT(datetime, Price) from #UserOrder


union ALL


select UserAddress, UserName, EntryDate from #UserInfo


---结果显示18行,保留了重复数据

3.执行顺序与左向右(可 通过列的顺序或空格改变结果集的排列顺序)

--案例 例如将UserName 放在前面,可以比较下其他列的情况

select UserName,UserAddress,  EntryDate from #UserInfo

union 


select UserName, CONVERT(NVARCHAR, Amount), CONVERT(datetime, Price) from #UserOrder

--案例是用空格 排序,可以演示查看结果


select UserName,UserAddress,  EntryDate from #UserInfo

union 


select ' ', CONVERT(NVARCHAR, Amount), CONVERT(datetime, Price) from #UserOrder

4.可以与select INTO 一起使用,但是INTO 必须放在第一个select 语句中 

--案例 只能放在第一个select 中

select UserName,UserAddress,  EntryDate 


Into #insertTables  


from #UserInfo


union 


select UserName, CONVERT(NVARCHAR, Amount), CONVERT(datetime, Price) from #UserOrder


--结果显示 插入12条数据

5.可以对合并的结果集进行排序,但排序的ORDER BY 必须放在最后一个select 后面,所使用的列名必须是第一个select中出现过的

--案例 排序的ORDER BY 必须放在最后一个select 后面

select UserName,UserAddress,  EntryDate 


from #UserInfo


union 


select UserName, CONVERT(NVARCHAR, Amount), CONVERT(datetime, Price) from #UserOrder


 ORDER BY UserName


--案例 如果需要随机获取指定数据,参照如下方法


 select* from (select TOP 2 UserName,UserAddress,  EntryDate  from #UserInfo Order By NewId()) A1

union ALL

select* from (select TOP 2 UserName, CONVERT(NVARCHAR, Amount) as Amount, CONVERT(datetime, Price)as Price from #UserOrder  Order By NewId()) A2

————————————————————

https://www.cnblogs.com/ankeyliu/p/11340381.html


该文章在 2023/5/29 10:39:17 编辑过
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved