主要学习:

1.以指定的次序返回查询结果
2.按多个字段排序
3.按字串排序
4.处理排序空值
5.根据数据项的键排序
具体实例1---以指定的次序返回查询结果
n使用ORDER BY子句可以对结果集进行排序 {!默认情况下,ORDER BY以升序方式排序,因此ASC子句是可选的。DESC表示降序排列!}
SELECT ENAME,JOB,SAL
FROM EMP
WHERE DEPTNO=10
ORDER BY SAL DESC;
n不一定要指定排序所基于的列名,也可以给出表示这列的编号。这个编号从1开始,从左到右依次对应SELECT列表中的各项目。例如: 
SELECT ENAME,JOB,SAL
FROM EMP
WHERE DEPTNO=10
ORDER BY 3 DESC;

ORDER BY子句中的3,与SELECT列表中的第3列对应,也就是SAL。{注意:不推荐使用列的编号进行排序}

具体实例2---按多个字段排序

SELECT  DEPTNO ,
ENAME ,
JOB ,
SAL ,
COMM
FROM EMP
WHERE DEPTNO<=20
ORDER BY SAL ASC,
COMM DESC
注意!!!在ORDER BY中,优先次序是从左到右。如果在SELECT列表中使用列的数字位置排序,那么,这个数值不能大于SELECT列表中项目的数目。

可以使用SELECT列表中没有的列来排序,但是在ORDER BY子句中必须显示地给出排序的列名。

如果在查询中使用GROUP BY或DISTINCT,则不能按照SELECT列表中没有的列来排序。

具体实例3---按字串排序

在ORDER BY子句中使用SUBSTRING函数:

SELECT DEPTNO ,
ENAME ,
JOB
FROM EMP
ORDER BY SUBSTRING(ENAME, LEN(ENAME),1) DESC ,
SUBSTRING(JOB,LEN(JOB),1) ASC;
也可以写成:ORDER BY LEFT(ENAME,1) DESC ,
LEFT(JOB,1) ASC;

使用DBMS的子串函数,可以很容易地按字符串的一部分来排序。要按照字符串的最后两个字符排序,首先要找到字符串的末尾(就是字符串的长度),并减去2。起始位置就是字符串中的倒数第2个字符。然后,获取从起始位置开始的所有字符。SQL Server在SUBSTRING中需要第3个参数来指定要获取的字符数。

具体实例4---处理排序空值

在EMP中根据COMM排序结果,但是这个字段可以有空值,需要指定是否将空值排在最前,或者将空值排在最后。

SELECT ENAME, SAL, COMM
FROM EMP
ORDER BY COMM;

结果:

具体实例4---处理排序空值

SELECT ENAME,
SAL,
COMM
FROM (SELECT ENAME, SAL, COMM,
CASE WHEN COMM IS NULL THEN 0
ELSE 1 END AS IS_NULL FROM EMP) X
ORDER BY IS_NULL DESC, COMM;

SELECT ENAME,
SAL,
COMM
FROM (SELECT ENAME, SAL, COMM,
CASE WHEN COMM IS NULL THEN 0
ELSE 1 END AS IS_NULL FROM EMP) X
ORDER BY IS_NULL DESC,
COMM DESC;

SELECT ENAME,
SAL,
COMM
FROM (SELECT ENAME, SAL, COMM,
CASE WHEN COMM IS NULL THEN 0
ELSE 1 END AS IS_NULL FROM EMP) X
ORDER BY IS_NULL, COMM;

SELECT ENAME,
SAL,
COMM
FROM (SELECT ENAME, SAL, COMM,
CASE WHEN COMM IS NULL THEN 0
ELSE 1 END AS IS_NULL FROM EMP) X
ORDER BY IS_NULL,
COMM DESC;

空值相关:

除非RDBMS提供了一种方式,可以很容易地将空值排在最前或排在最后,而不必在同列修改非空值(例如Oracle的情况),否则,就需要一个附加的列。多加1列的目的是(只是在查询中,不是在表中),可以判别空值,并将它们排在一起,放在最前面或最后面。对于非Oracle解决方案,下面的查询返回内联视图X的结果集:
SELECT ENAME,
SAL,
COMM,
CASE WHEN COMM IS NULL THEN 0
ELSE 1
END AS IS_NULL
FROM EMP;

根据IS_NULL的值,可以很容易地将NULL排在最前面或最后面,而不影响COMM如何排序

具体实例5---根据数据项的键排序

可以使用CASE表达式来动态改变如何对结果排序。传递给ORDER BY的值类似这样

SELECT ENAME,
SAL,
JOB,
COMM,
CASE WHEN JOB='SALESMAN' THEN COMM
ELSE SAL
END AS ORDERED
FROM EMP
ORDER BY ORDERED;

SQL Server order by语句学习回顾的更多相关文章

  1. SQL server 查看什么语句在使用临时表

    SQL server 查询那些语句在使用临时表 最近在日常的性能测试工作中发现,数据库端的IO读写比较大,有规律的2-8M的波动,数据库的版本为 SQL server 2008 sp3. 这些IO操作 ...

  2. 【转载】SQL Server - 使用 Merge 语句实现表数据之间的对比同步

    原文地址:SQL Server - 使用 Merge 语句实现表数据之间的对比同步 表数据之间的同步有很多种实现方式,比如删除然后重新 INSERT,或者写一些其它的分支条件判断再加以 INSERT ...

  3. Sql server的Merge语句,源表中如果有重复数据会导致执行报错

    用过sql server的Merge语句的开发人员都应该很清楚Merge用来做表数据的插入/更新是非常方便的,但是其中有一个问题值得关注,那就是Merge语句中的源表中不能出现重复的数据,我们举例来说 ...

  4. SQL Server ---T-SQl基本语句

    T-SQL 是 SQL-Server 的结构化查询语言. 基本数据操作语言. 基础语句 先创建表 我后面的列子都是用的这一个表,列名啥的 就大概看看吧~~ 纯粹为了学习语句,语法~~所以先创建个表吧~ ...

  5. SQL Server 基本SELECT语句

    1.SELECT 和 FROM 语句 SELECT表示执行的是查询,接着需要更知道从哪边查询数据,FROM就是限制读取的数据在哪一个表或哪几个表中,这样就构成了一个基本语句. SELECT * FRO ...

  6. SQL Server读懂语句运行的统计信息 SET STATISTICS TIME IO PROFILE ON

    对于语句的运行,除了执行计划本身,还有一些其他因素要考虑,例如语句的编译时间.执行时间.做了多少次磁盘读等. 如果DBA能够把问题语句单独测试运行,可以在运行前打开下面这三个开关,收集语句运行的统计信 ...

  7. SQL Server中CURD语句的锁流程分析

    我只在数据库选项已开启“行版本控制的已提交读”(READ_COMMITTED_SNAPSHOT为ON)中进行了观察. 因此只适用于这种环境的数据库. 该类数据库支持四种不同事务隔离级别,下面分别观察数 ...

  8. SQL Server与Oracle对比学习:权限管理(一)

    http://blog.csdn.net/weiwenhp/article/details/8093661 我们发现我们现在的生活中到处是涉及到密码,你要记各种各样的密码.比如银行卡,邮件,QQ,微博 ...

  9. SQL Server与Oracle对比学习:表的管理和组织

    http://blog.csdn.net/weiwenhp/article/details/8088979 我们知道数据库,顾名思义.最重要的东东就是管理数据,而数据在系统中主要是保存在表(table ...

随机推荐

  1. [译]Create a Web API in MVC 6

    原文: http://www.asp.net/vnext/overview/aspnet-vnext/create-a-web-api-with-mvc-6 ASP.NET 5.0的一个目标是合并MV ...

  2. 基于iSCSI的SQL Server 2012群集测试(四)--模拟群集故障转移

    6.模拟群集故障转移 6.1 模拟手动故障转移(1+1) 模拟手动故障转移的目的有以下几点: 测试群集是否能正常故障转移 测试修改端口是否能同步到备节点 测试禁用full-text和Browser服务 ...

  3. VBA 表操作1

    VBA 新建表.批量建表 例1 创建一个工作簿 注意 .name 与 .range ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ...

  4. 2015baidu复赛2 连接的管道(mst && 优先队列prim)

    连接的管道 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  5. Why Reflection is slowly?(Trail: The Reflection API)

    反射的使用 反射通常用于在JVM中应用程序运行中需要检查或者修改运行时行为的项目.这是一个相对高级的特性,并且仅仅可以被对深刻理解java原理的开发者使用.这里给出一个警告的意见,反射是一个强大的技术 ...

  6. spring 控制事务

    <!-- 对数据源进行事务管理 -->        <bean id="transactionManager"         class="org. ...

  7. Moment.js 超棒Javascript日期处理类库

    Moment.js 不容错过的超棒Javascript日期处理类库 主要特性: 3.2kb超轻量级 独立类库,意味这你不需要倒入一堆js 日期处理支持UNIX 时间戳,String,指定格式的Date ...

  8. 一种map容器遍历的方法

    遍历算法是一种很常见而且非常重要的算法,我们用map容器的时候可能用的比较多的是查找,我今天才第一次要用到遍历.下面举个例子就知道了. map<string,string> mp; str ...

  9. HDU 3351 Seinfeld(括号匹配)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3351 解题报告:输入一个只有'{'跟'}'的字符串,有两种操作,一种是把'{'变成'}',另一种是'} ...

  10. HDU 4923 Room and Moor

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4923 解题报告:给出一个长度为n的只包含0和1的序列,是否存在一个序列Bi满足一下条件: 1.     ...