SQL SERVER 中UNION,UNION ALL用法,并且子句中Order by用法

SQL SERVER 中UNION,UNION ALL用法,并且子句中Order by用法CREATEtableT_Test(Idintnotnull,namenvarchar(50)notnull)INSERTINTOT_TestVALUES(1,’a’)INSERTINTOT_TestVALUES(2,’-‘)INSERTINTOT_TestVALUES(3,’b’)INSERTINTOT_TestVA…

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 +
 */

SQL SERVER 中UNION,UNION ALL用法,并且子句中Order by用法

一、问题:如果想要得到一个结果集是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高,符合结果

SQL SERVER 中UNION,UNION ALL用法,并且子句中Order by用法

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

SQL SERVER 中UNION,UNION ALL用法,并且子句中Order by用法

说明: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 SERVER 中UNION,UNION ALL用法,并且子句中Order by用法
以下面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 中UNION,UNION ALL用法,并且子句中Order by用法

欢迎加群,日用儿童母婴分享大牌淘宝京东优惠券     

SQL SERVER 中UNION,UNION ALL用法,并且子句中Order by用法    

SQL SERVER 中UNION,UNION ALL用法,并且子句中Order by用法

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/34222.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注