《SQL经典实例》读书笔记二

第二章:查询结果排序

2.1以指定顺序返回查询结果

你想显示部门编号为 10 的员工的名字、职位和工资,并根据工资从低到高排序。

SELECT ename,job,sal
FROM emp
WHERE deptno=10
ORDER BY sal ASC

ORDER BY 子句可以对结果集排序。本实例针对 SAL 按照升序排列。默认情况下,ORDER BY会做升序排列,因此 ASC 子句是可选项。相应地,也可以通过指定 DESC 执行降序排列.

2.2 多字段排序

针对 EMP 表的数据,你想先按照 DEPTNO 升序排列,然后再按照 SAL 降序排列。

SELECT *
FROM emp
ORDER BY deptno ,sal DESC

2.3依据子串排序

你希望从 EMP 表检索员工的名字和职位,并且按照职位字段的最后两个字符对检索结果进行排序。

SELECT ename,job
FROM emp
ORDER BY SUBSTR(job,length(job)-2)

要想按照一个字符串的最后两个字符排序,需要先找到该字符串的结尾处(即字符串的长度),然后减去 2。这样,起始位置就是该字符串的倒数第 2 个字符。然后,你就可以截取从指定起始位置开始直到字符串结束的所有字符。

2.4 对含有字母和数字的列进行排序

2.5排序时对NULL值的处理

你可能想把非 Null 值以升序排列或降序排列,而把全部 Null 值都放到最后面,那么你就要使用 CASE 表达式来动态调整排序项。

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    #非Null值COMM升序排列,全部Null值放到最后面 

使用 CASE 表达式标记 Null 值。该标记有两种可能的取值:一种代表 Null 值,另一种代
表非 Null 值。一旦你做好了标记,只要简单地把它放进 ORDER BY 子句就行了。

2.6 依据条件逻辑动态调整排序项

你希望按照某个条件逻辑来排序。例如,如果 JOB 等于 SALESMAN,就要按照 COMM 来排序;否则,按照 SAL 排序。
在 ORDER BY 子句里使用 CASE 表达式。

SELECT ename,sal,job,comm
FROM emp
ORDER BY CASE WHEN job='SALESMAN' THEN comm ELSE sal END

猜你喜欢

转载自blog.csdn.net/weixin_42695959/article/details/88355249