主要学习:

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. Windows Server 2008 R2 IIS7.5下PHP、MySQL快速环境配置【图】

    众所周知,win平台的服务器版本默认是不能运行php的,需要对服务器进行环境配置. 而许多朋友纠结如何配置,在百度上搜索出的教程一大堆,基本步骤复杂,新手配置容易出错. 今天,邹颖峥教大家一种快速配置 ...

  2. linxu scp命令

    \ svn 删除所有的 .svn文件 find . -name .svn -type d -exec rm -fr {} \; linux之cp/scp命令+scp命令详解   名称:cp 使用权限: ...

  3. PHP基础之 重载 的实现方式

    ===================PHP中的伪重载Overloading================== PHP中没有像C#或java中的重载,但可以通其它方法实现重载 重载:属性重载与方法重 ...

  4. HDOJ 3507 Print Article

    Print Article Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)To ...

  5. Codeforces Round #270 1003

    Codeforces Round #270 1003 C. Design Tutorial: Make It Nondeterministic time limit per test 2 second ...

  6. r8 - ASC 41(俄罗斯多校)

    1 今天干的俄罗斯的一场多校,被虐哭啊,就做出两题. 2 3 4 5 6 7 Gym 100496D Data Mining 8 题目讲得是给你一串数字,然后给你i,p,表示从第i开始,对这串数离散话 ...

  7. Redis命令

    redis的常用命令主要分为两个方面.一个是键值相关命令.一个是服务器相关命令(redis-cli进入终端) 1.键值相关命令 keys * 取出当前所有的key exists name 查看n是否有 ...

  8. 【PHP面向对象(OOP)编程入门教程】22.把对象串行化serialize()方法,__sleep()方法,__wakeup()方法

    有时候需要把一个对象在网络上传输,为了方便传输,可以把整个对象转化为二进制串,等到达另一端时,再还原为原来的对象,这个过程称之为串行化(也叫序列化), 就像我们现在想把一辆汽车通过轮船运到美国去,因为 ...

  9. loadrunner 学习笔记--AJAX(转)

    用loadrunner测试WEB程序的时候总是会碰到AJAX或者ActiveX实现的功能,而通常这些功能会包含很多客户端函数(一般为JavaScript).我们该如何处理?如果从功能实现的角度去考虑这 ...

  10. SQL Server 跨数据库查询

    语句 SELECT * FROM 数据库A.dbo.表A a, 数据库B.dbo.表B b WHERE a.field=b.field "DBO"可以省略 如 SELECT * F ...