ORDER BY 子句

ORDER BY 子句指定要返回所选行的特定顺序。 顺序按列或表达式值的升序或降序整理顺序排序。

例如,要检索按部门编号字母数字顺序列出的女性员工的姓名和部门编号,可以使用以下 SELECT 语句:

SELECT LASTNAME,WORKDEPT
       FROM CORPDATA.EMPLOYEE
       WHERE SEX='F'
       ORDER BY WORKDEPT;

结果如下。

LASTNAME WORKDEPT
HAAS A00
赫明格 A00
KWAN C01
QUINTANA C01
NICHOLLS C01
北约 Z C01
PIANKA D11
SCOUTTEN D11
LUTZ D11
JOHN D11
PULASKI D21
JOHNSON D21
PEREZ D21
HENDERSON E11
SCHNEIDER E11
SETRIGHT E11
施瓦茨 E11
斯普林格 E11
E21
注: 空值作为最高值排序。

在 ORDER BY 子句中指定的列不需要包含在 SELECT 子句中。 例如,以下声明将首先返回以最大工资订购的所有女性员工:

SELECT LASTNAME,FIRSTNME
       FROM CORPDATA.EMPLOYEE
       WHERE SEX='F'
       ORDER BY SALARY DESC;

如果指定了 AS 子句来命名选择列表中的结果列,那么可以在 ORDER BY 子句中指定此名称。 在 AS 子句中指定的名称在选择列表中必须唯一。 例如,要检索按字母顺序列出的员工全名,可以使用以下 select-statement:

  SELECT LASTNAME CONCAT FIRSTNME AS FULLNAME
    FROM CORPDATA.EMPLOYEE
    ORDER BY FULLNAME;

可以选择将此 SELECT 语句编写为:

  SELECT LASTNAME CONCAT FIRSTNME
    FROM CORPDATA.EMPLOYEE
    ORDER BY LASTNAME CONCAT FIRSTNME;

您可以使用数字,而不是对列进行命名以对结果进行排序。 例如, ORDER BY 3 指定您希望结果按结果表的 第三 列 (由选择列表指定) 排序。 当排序值不是指定的列时,使用数字对结果表的行进行排序。

您还可以指定是希望 SQL 按升序 (ASC) 还是降序 (DESC) 顺序整理行。 缺省值为升序整理顺序。 在先前的 SELECT 语句中, SQL 首先返回具有最低 FULLNAME 表达式 (按字母和数字顺序) 的行,然后返回具有较高值的行。 要根据此名称以降序整理顺序对行进行排序,请指定:

... ORDER BY FULLNAME DESC

您可以指定辅助排序顺序 (或多个排序顺序级别) 以及主排序顺序。 在上一个示例中,您可能希望首先按部门编号对行进行排序,然后在每个部门内按员工姓名对行进行排序。 为此,请指定:

... ORDER BY WORKDEPT, FULLNAME

如果在 ORDER BY 子句中使用字符列, UCS-2 或 UTF-16 图形列,那么这些列的排序将基于运行查询时生效的排序顺序。