1 つの問い合わせが 1 つの出力テーブルを生成した後(select リストの処理が完了した後)、任意で並べ替えることができます。並べ替えが選ばれなかった場合、行はランダムな順序で返されます。そのような場合、実際の順序は、スキャンや結合計画の種類や、ディスク上に格納されている順序に依存します。しかし、信頼は出来ません。特定の順序で出力することは、明示的に並べ替え処理を選択することのみによって保証されます。
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 がデフォルトです。昇順はより小さな値を始めに置きます。"より小さい"は、 < 演算子で定義されます。同じように、降順は > 演算子で指定されます。
1 つ以上の列を並べ替えるよう指定すると、後に指定されたものは、前に指定した並び換えで並べ換えられたもののうち等しいとされた行に対して適用されます。