|
2.5. 行排序在一个查询生成一个输出表之后(在处理完选择列表之后), 你还可以对它进行排序.如果没有选择排序,那么行将以随机 的顺序返回.这时候的实际顺序将取决于扫描和连接规划类型和 在磁盘上的顺序,但是肯定不能依赖这些东西.一定的顺序只能在 明确地使用了排序步骤之后才能保证. ORDER BY 子句声明了排序顺序 SELECT select_list FROM table_expression ORDER BY column1 [ ASC | DESC ] [ , column2 [ ASC | DESC ] ... ] column1 ,等指向选择列表: 它可以是一个列的名字(可以是明确的列标签也可以是缺省名字, 象 Section 2.3.1 里解释的那样) 或者是一个列的数字.一些例子: SELECT a, b FROM table1 ORDER BY a; SELECT a + b AS sum, c FROM table1 ORDER BY sum; SELECT a, sum(b) FROM table1 GROUP BY a ORDER BY 1;
作为对标准 SQL 的扩展,PostgreSQL 还允许对任意表达式进行排序: SELECT a, b FROM table1 ORDER BY a + b; 还允许引用在选择列表中重命名的 FROM 子句中的列名字: SELECT a AS b FROM table1 ORDER BY a; 但是这个特性在涉及 UNION,INTERSECT,或 EXCEPT 的查询中 是不能用的,而且也不可移植到其它 DBMS . 声明的每个列都可以跟着一个可选的 ASC 或 DESC 以设置排序方向. 缺省是 ASC .升序先输出小的数值,这里的 "小" 是以 < 操作符的角度定义的.类似的是, 降序是以 > 操作符来判断的. 如果声明了多于一个排序列,那么在前面的排序声明相等的情况下 使用后面的记录的进一步排序. |