《SQL基础教程》第04章 排序


排序用关键字"order by",起后跟字段列表。排序分升序(ascending)和降序 (descending),默认是升序,在字段列表的各个字段后面跟关键字DESC,则该字 段将按照降序排列。

升序的排列

字段后面不指定时为升序。

SQL> select DEPID,STDNAME
  2  from   STUFF
  3  order by DEPID;

DE STDNAME
-- --------
10 孙荃
10 鲁素
10 花牧岚
20 张妃
20 诸葛靓
20 周语
20 江叁讲
20 穆归营
30 关玉
30 邓笑评
30 李斯硼
30 曹草
30 刘蓓

已选择13行。

降序的排列

字段后面指定'DESC'时为降序。

SQL> select DEPID,STDNAME
  2  from   STUFF
  3  order by DEPID desc;

DE STDNAME
-- --------
30 关玉
30 刘蓓
30 李斯硼
30 曹草
30 邓笑评
20 张妃
20 穆归营
20 诸葛靓
20 江叁讲
20 周语
10 孙荃
10 鲁素
10 花牧岚

已选择13行。

多个字段的排列

下例指定按照部门的升序、工资的降序排列,注意:是在部门排序的基础之上对 工资进行再排序。"order by"后面的字段列表中的先后位置是很重要的。

  1  select DEPID,STDNAME,SALAR
  2  from   STUFF
  3* order by DEPID,SALARY desc
SQL> /

DE STDNAME      SALARY
-- -------- ----------
10 鲁素           9000
10 孙荃           3450
10 花牧岚         2300
20 周语           3000
20 穆归营         3000
20 江叁讲         2975
20 诸葛靓         2100
20 张妃           1800
30 邓笑评         3850
30 关玉           2600
30 曹草           2500
30 刘蓓           2250
30 李斯硼         2250

已选择13行。

指定字段的序号进行排列

字段序号指用"select"后面的字段列表中的顺序号,来代替"order by"后面的字段 列表。

  1  select DEPID,STDNAME,SALAR
  2  from   STUFF
  3* order by 1,3 desc
SQL> /

DE STDNAME      SALARY
-- -------- ----------
10 鲁素           9000
10 孙荃           3450
10 花牧岚         2300
20 周语           3000
20 穆归营         3000
20 江叁讲         2975
20 诸葛靓         2100
20 张妃           1800
30 邓笑评         3850
30 关玉           2600
30 曹草           2500
30 刘蓓           2250
30 李斯硼         2250

已选择13行。

不显示的字段进行排列

在"order by"后面的字段列表中的字段不一定是"select"字段列表存在的,事实上, "order by"后面的字段列表中的字段同样可以是表达式,只要这个表达式如果放在"select" 字段列表中不出错,这样的表达式也是合法的。

  1   select DEPID,STDNAME,SALARY
  2   from   STUFF
  3*  order by DEPID,YMD desc
SQL> /

DE STDNAME      SALARY
-- -------- ----------
10 花牧岚         2300
10 鲁素           9000
10 孙荃           3450
20 周语           3000
20 诸葛靓         2100
20 江叁讲         2975
20 穆归营         3000
20 张妃           1800
30 李斯硼         2250
30 曹草           2500
30 邓笑评         3850
30 刘蓓           2250
30 关玉           2600

已选择13行。

对字段别名进行排列

因字段别名只能在"select"后面的字段列表中被指定,所以这个别名一定要在 "select"后面的字段列表中存在。事实上,别名作为表达式的一部分也是可以的。

  1   select DEPID,STDNAME,SALARY 工资
  2   from   STUFF
  3*  order by DEPID,工资 desc
SQL> /

DE STDNAME        工资
-- -------- ----------
10 鲁素           9000
10 孙荃           3450
10 花牧岚         2300
20 周语           3000
20 穆归营         3000
20 江叁讲         2975
20 诸葛靓         2100
20 张妃           1800
30 邓笑评         3850
30 关玉           2600
30 曹草           2500
30 刘蓓           2250
30 李斯硼         2250

已选择13行。