主要学习:
SELECT ENAME,JOB,SAL FROM EMP WHERE DEPTNO=10 ORDER BY SAL DESC;
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
可以使用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;
空值相关:
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;