SQL SERVER 中UNION,UNION ALL用法,并且子句中Order by用法
2018-03-15 14:44
1146 查看
CREATE table T_Test( Id int not null , name nvarchar(50) not null ) INSERT INTO T_Test VALUES (1,'a') INSERT INTO T_Test VALUES (2,'-') INSERT INTO T_Test VALUES (3,'b') INSERT INTO T_Test VALUES (4,'c') INSERT INTO T_Test VALUES (4,'+') /* SELECT * from T_Test Id name 1 a 2 - 3 b 4 c 4 + */
一、问题:如果想要得到一个结果集是T_Test按照name正序排列,并且特殊符号放置字母后
1.SELECT * FROM (SELECT TOP 100 percent * from T_Test where name >= 'A' ORDER BY name ) a union ALL SELECT * FROM (SELECT TOP 100 percent * from T_Test where name < 'A' ORDER BY name ) b结果为:
Id name
1 a
3 b
4 c
2 -
4 +
说明:union ALL不去重不排序,所以效率比union高,符合结果
2.
SELECT * FROM (SELECT TOP 100 percent * from T_Test where name >= 'A' ORDER BY name ) a union SELECT * FROM (SELECT TOP 100 percent * from T_Test where name < 'A' ORDER BY name ) b结果为:
Id name
1 a
2 -
3 b
4 +
4 c
说明:UNION去重且排序,Union将会按照字段的顺序进行排序,这样结果不是想要的,
如果可以确认合并的两个结果集中不包含重复数据且不需要排序时的话,那么就使用UNION ALL。
二、关于union,或union all子句中排序ORDER BY用法,下面写法是语法错误的
SELECT * from T_Test where name >= 'A' ORDER BY name union ALL SELECT * from T_Test where name < 'A' ORDER BY name
以下面sql为例
SELECT * FROM (SELECT TOP 100 percent * from T_Test where name >= 'A' ORDER BY name ) a union ALL SELECT * FROM (SELECT TOP 100 percent * from T_Test where name < 'A' ORDER BY name ) b正确结果,必须要嵌套一层SELECT * FROM (SELECT TOP 100 percent * from T_Test where name >= 'A' ORDER BY name ) a
如果去掉“TOP 100 percent”,则会抛出异常“除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效”
相关文章推荐
- SQL Server 排序函数 ROW_NUMBER、RANK、DENSE_RANK、INTERSECT、UNION、UNION ALL 用法总结
- 解决SQL Server查询中使用Union或Union All后Order by排序无效的bug(好神奇啊!!)
- oracle中union 和union all的用法
- 关于union all中使用多个order by 子句引起的问题
- Oracle中 union 和 union all 的用法和区别
- union,union all用法及区别
- Oracle基础——union与union all的用法与区别
- SQL Server 2005的OutPut子句用法
- Union和Union ALL的用法
- union, union all 的用法
- SAP HANA SQL语句UNION 和 UNION ALL的用法
- [sql server] 问题总结7- union-- union all--with as 实例
- [SQL Server] ORDER BY 子句在视图、派生表、子查询等表达式中无效
- .Sql server中union, union all 的用法
- MySQL中Union子句不支持order by的解决方法
- Union,Union all用法及区别
- SQL语句之Union和Union All的用法
- SQL [UNION]和[UNION ALL]用法
- SQL 中union 和union all的用法及其效率对比
- order by居然不能直接在union子句中使用