本节书摘来自异步社区出版社《Oracle SQL疑难解析》一书中的第1章,第1.3节,作者: 【美】Grant Allen , Bob Bryla , Darl Kuhn,更多章节内容可以访问云栖社区“异步社区”公众号查看。
1.3 将结果排序
Oracle SQL疑难解析
1.3.1 要解决的问题
用户想把查询出来的记录按某种顺序排列。例如,他们想把员工先按姓、再按名的字母顺序排列。
1.3.2 解决方法
Oracle允许使用标准的ORDER BY子句来排列查询结果:
select employee_id, first_name, last_name, hire_date, salary
from hr.employees
where salary > 5000
order by last_name, first_name;
得到的结果如下:
EMPLOYEE_ID FIRST_NAME LAST_NAME HIRE_DATE SALARY
----------- ---------- --------- --------- ------
174 Ellen Abel 11/MAY/96 11000
166 Sundar Ande 24/MAR/00 6400
204 Hermann Baer 07/JUN/94 10000
167 Amit Banda 21/APR/00 6200
172 Elizabeth Bates 24/MAR/99 7300
151 David Bernstein 24/MAR/97 9500
169 Harrison Bloom 23/MAR/98 10000
148 Gerald Cambrault 15/OCT/99 11000
154 Nanette Cambrault 09/DEC/98 7500
110 John Chen 28/SEP/97 8200
…
1.3.3 数据库如何工作
在ORDER BY 子句的作用下,Oracle先按LAST_NAME字段进行排序,在LAST_NAME的值相同的情况下,再按FIRST_NAME字段来排序。如果用户不在语句中指明升序或降序,则Oracle 隐式使用升序来排列结果,数字是从0到9,字母从A到Z,依此类推。可以用ASC 或DESC选项显式控制升序或降序。例如:
select employee_id, first_name, last_name, hire_date, salary
from hr.employees
where salary > 5000
order by salary desc;
语句中显式地指明了按薪水字段降序排列,得到的结果是:
EMPLOYEE_ID FIRST_NAME LAST_NAME HIRE_DATE SALARY
----------- ---------- --------- --------- ------
100 Steven King 17-JUN-87 24000
102 Lex De Haan 13-JAN-93 17000
101 Neena Kochhar 21-SEP-89 17000
145 John Russell 01-OCT-96 14000
146 Karen Partners 05-JAN-97 13500
…