Oracle DB Order By子句
Oracle DB 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 的降序排序。