- カテゴリ:
ORDER BY¶
SELECT リストからの結果テーブルの行の順序を指定します。
構文¶
SELECT ...
FROM ...
ORDER BY orderItem [ , orderItem , ... ]
[ ... ]
- 条件:
orderItem ::= { <column_alias> | <position> | <expr> } [ ASC | DESC ] [ NULLS { FIRST | LAST } ]
column_alias
クエリブロックの SELECT リストに表示される列エイリアス。
position
SELECT リスト内の式の位置。
expr
現在のスコープ内のテーブルの式。
ASC | DESC
オプションで、昇順(低い順)または降順(高い順)でソートキーの値を返します。
デフォルト:
ASC
NULLS FIRST | LAST
オプションで、ソート順(
ASC
またはDESC
)に基づいて、 NULL 値を NULL 以外の値の前後に返すかどうかを指定します。デフォルト:ソート順(
ASC
またはDESC
)に依存します。詳細については、以下の使用上の注意をご参照ください
使用上の注意¶
すべてのデータは、ASCII テーブルの各文字の数値バイト値に従ってソートされます。UTF-8エンコードがサポートされています。
数値の場合、小数点の前の先行ゼロと小数点の後の後続ゼロ(
0
)は、ソート順に影響しません。特に指定がない限り、 NULL 値は、 NULL 以外の値よりも高いと見なされます。その結果、 NULLS の順序はソート順に依存します。
ソート順が
ASC
の場合は、 NULLS が最後に返されます。強制的に NULLS を最初にするには、NULLS FIRST
を使用します。ソート順が
DESC
の場合は、最初に NULLS が返されます。強制的に NULLS を最後にするには、NULLS LAST
を使用します。
ORDER BY は、クエリのさまざまなレベルで使用できます。たとえば、サブクエリや OVER() サブ句内などです。サブクエリまたはサブ句内の ORDER BY は、そのサブクエリまたはサブ句内のみで適用されます。たとえば、次のクエリの ORDER BY は、クエリの最も外側のレベルではなく、サブクエリ内のみで結果を並べ替えます。
select * from ( select branch_name from branch_offices ORDER BY monthly_sales DESC limit 3 ) ;
この例では、サブクエリで ORDER BY が指定されているため、サブクエリは月次売上の順に名前を返します。サブクエリの ORDER BY は、外部クエリには適用されません。このクエリは、毎月の売上が最も多かった3つの支店名を返しますが、必ずしも月次の売上順ではありません。
並べ替えのコストは高価になる場合があります。外部クエリの結果を並べ替える場合は、クエリの最上位でのみ
ORDER BY
句を使用し、必要がない限り、サブクエリでORDER BY
句を使用しないようにします。
例¶
文字列のソート順の例:
SELECT column1 FROM VALUES ('a'), ('1'), ('B'), (null), ('2'), ('01'), ('05'), (' this'), ('this'), ('this and that'), ('&'), ('%') ORDER BY column1; +---------------+ | COLUMN1 | |---------------| | this | | % | | & | | 01 | | 05 | | 1 | | 2 | | B | | a | | this | | this and that | | NULL | +---------------+
数字のソート順の例:
SELECT column1 FROM VALUES (3), (4), (null), (1), (2), (6), (5), (0005), (.05), (.5), (.5000) ORDER BY column1; +---------+ | COLUMN1 | |---------| | 0.05 | | 0.50 | | 0.50 | | 1.00 | | 2.00 | | 3.00 | | 4.00 | | 5.00 | | 5.00 | | 6.00 | | NULL | +---------+
NULL 値のソート順の例:
SELECT column1 FROM VALUES (1), (null), (2), (null), (3) ORDER BY column1; +---------+ | COLUMN1 | |---------| | 1 | | 2 | | 3 | | NULL | | NULL | +---------+ SELECT column1 FROM VALUES (1), (null), (2), (null), (3) ORDER BY column1 NULLS FIRST; +---------+ | COLUMN1 | |---------| | NULL | | NULL | | 1 | | 2 | | 3 | +---------+ SELECT column1 FROM VALUES (1), (null), (2), (null), (3) ORDER BY column1 DESC; +---------+ | COLUMN1 | |---------| | NULL | | NULL | | 3 | | 2 | | 1 | +---------+ SELECT column1 FROM VALUES (1), (null), (2), (null), (3) ORDER BY column1 DESC NULLS LAST; +---------+ | COLUMN1 | |---------| | 3 | | 2 | | 1 | | NULL | | NULL | +---------+