查询结果排序
在执行查询操作时,默认情况下查询结果无序排列。这种无需的显示非常不方便查看 为了更直观的显示数据结果,经常需要对数据按一定规则进行排序操作。查询结果排序 的功能由ORDER BY子句实现,语法如下:
- SELECT <*,COLUM[ALIAS],...>
- FROM TABLE
- [WHERE condition(s)]
- [ORDER BY column [ASC | DESC]];
在上述语法中,ORDER BY子句用来指定排序列,ASC用来指定升序排序(默认选项),DESC 用来指定降序排序。注意ORDER BY子句必须出现在SELECT中的最后一个子句
-
升序排序
- > 在SELECT中使用 ORDER BY子句指定了拍序列,默认情况下数据是按升序排列的,也就是说,可以指定ASC关键字指定升序排列,如果不指定,默认就是升序,显示效果是
- 一样的。
- --例1:测试查询结果按升序排列
- SELECT ENAME,SAL
- FROM SCOTT.EMP
- ORDER BY SAL;
- 结果为: 
- **值得注意的一点是,如果子啊排序的列中有NULL值,则NULL值会显示在最后,NULL值被认为是最大**
- --例2:测试查询结果升序排列,排序列中有NULL值
- SELECT EMPNO,ENAME,MGR
- FROM SCOTT.EMP
- WHERE DEPTNO = 10
- ORDER BY MGR;
- 结果为: 
-
降序排序
-
使用非选择列表排序
- --例4: 使用非选择排序
- SELECT ENAME
- FROM SCOTT.EMP
- ORDER BY SAL DESC ;
- 结果为: 
-
使用表达式排序
- > 在SELECT的列中可以出现算数表达式,排序时可以使用表达式来按照表达式
- 的计算结果来排序的目的
- --例5: 使用表达式排序
- SELECT ENAME,SAL,SAL * 12
- FROM SCOTT.EMP
- ORDER BY SAL * 12 DESC ;
- 结果为: 
-
使用列别名排序
- > 在做SELECT查询是,可以为表的列或表达式定义别名。
- 在执行排序操作时,可以使用列的别名进行排序。
- --例6: 使用列的别名排序
- SELECT ENAME,SAL * 12 ANNUAL_SALARY
- FROM SCOTT.EMP
- ORDER BY ANNUAL_SALARY DESC ;
- 结果为: 
-
使用列位置排序
- > Oracle可以按照列或表达式在SELECT列表中的位置进行排序,可以有效的缩减排序语句的长度。另外在使用UNION这类的集合
- 操作符时,如果SELECT列表的列名不同,此时必须使用列表达式
- 排序。
- --例7: 使用列的位置排序
- --查询部门表和职员表,列出所有部门编码和部门名字,以及所有的
- --职工编码和职工名字,并以部门编码和职工编码作为升序排列的标准
- SELECT DEPTNO,DNAME
- FROM SCOTT.DEPT
- UNION
- SELECT EMPNO,ENAME
- FROM SCOTT.EMP
- ORDER BY 1;
- 结果为: 
-
使用多列排序
- > 在执行操作时,不仅可以按照单列进行排序,还可以根据多列排序。当以多列
- 作为排序的标准时,首先按照第一列进行排序,如果第一列数据相同,再以第二列
- 排序,以此类推。
- 需要注意的是,多列排序是,不管正序还是倒序,每个列需要单独的设置排序方式。
- --例8: 使用多列排序
- --对职员表中的职员排序,先按照部门编码正序排列,再按照薪水降序排列
- SELECT ENAME,DEPTNO,SAL
- FROM SCOTT.EMP
- ORDER BY DEPTNO ASC,SAL DESC ;
- 结果为: 