Oracle DB Order By子句

  • 使用ORDER BY 子句
• 使用ORDER BY 子句可对检索行进行排序:
– ASC :升序,默认顺序
– DESC:降序
• ORDER BY 子句位于SELECT 语句的最后:
hr@TEST0924> SELECT last_name, job_id, department_id, hire_date FROM employees ORDER BY hire_date ;

LAST_NAME                 JOB_ID     DEPARTMENT_ID HIRE_DATE
------------------------- ---------- ------------- ------------------
De Haan                   AD_VP                 90 13-JAN-01
Mavris                    HR_REP                40 07-JUN-02
Baer                      PR_REP                70 07-JUN-02

查询结果中返回行的顺序是未定义的。可使用ORDER BY 子句对这些行进行排序。但是,如果使用ORDER BY 子句,该子句必须是SQL 语句的最后一个子句。此外,可以指定表达式、别名或列位置作为排序条件。
语法
SELECT expr
FROM table
[WHERE condition(s)] 
[ORDER BY {column , expr, numeric_position} [ASC|DESC]];
在该语法中:
ORDER BY:指定检索行的显示顺序
ASC:按升序对行进行排序(此为默认顺序)
DESC:按降序对行进行排序
如果没有使用ORDER BY 子句,则排序顺序未定义,因此如果同一查询执行两次,Oracle Server  每次提取行的顺序可能不同。使用ORDER BY 子句可按特定顺序显示行。
注:使用关键字 NULLS FIRST 或NULLS LAST可指定包含空值的返回行是出现在排序序列的最前面还是最后。


  • 排序
• 按降序排序:
SELECT   last_name, job_id, department_id, hire_date
FROM     employees
ORDER BY hire _date DESC ;
• 按列别名排序:
SELECT employee_id, last_name, salary*12 annsal
FROM   employees
ORDER BY annsal ;


默认排序顺序是升序:
• 从小到大显示数值,例如1  到999。
• 由远到近显示日期值,例如,01-JAN-92  显示在 01-JAN-95  之前。
• 按字母顺序显示字符值,例如,先显示A,最后显示Z。
• 对于升序排序,空值显示在最后,对于降序排序,则显示在最前面。
• 也可以按不在SELECT 列表之内的列进行排序。
示例:
1. 要使行的显示顺序反转,请在ORDER BY 子句中在列名之后指定DESC 关键字。
示例中按最近聘用的雇员对结果进行排序。
2. 此外,还可在ORDER BY 子句中使用列别名。示例中按年薪对数据进行排序。
注:请勿将此处用于按降序排序的 DESC 关键字与用于描述表结构的DESC 关键字混淆。


• 使用列的数字位置进行排序:
SELECT   last_name, job_id, department_id, hire_date
FROM     employees
ORDER BY 3;
通过在SELECT 子句中指定列的数字位置可对查询结果排序。示例中按department_id 对结果进行排序,因为该列在SELECT 子句中位于第三位。
• 按多个列进行排序:
SELECT last_name,  department_id, salary
FROM   employees
ORDER BY department_id, salary DESC;
可按多个列对查询结果进行排序。排序的列限制是给定表中的列数。在ORDER BY子句中,可以指定列并使用逗号分隔列名。如果希望反转列顺序,请在列名后指定DESC。示例中显示的查询示例结果按department_id 的升序、salary  的降序排序。
原文地址:https://www.cnblogs.com/hzcya1995/p/13316908.html