- カテゴリ:
ORDER BY¶
SELECT リストからの結果テーブルの行の順序を指定します。
構文¶
特定の列による並べ替え
SELECT ... FROM ... ORDER BY orderItem [ , orderItem , ... ] [ ... ] 条件:
orderItem ::= { <column_alias> | <position> | <expr> } [ { ASC | DESC } ] [ NULLS { FIRST | LAST } ] すべての列による並べ替え
SELECT ... FROM ... ORDER BY ALL [ { ASC | DESC } ] [ NULLS { FIRST | LAST } ] [ ... ] パラメーター¶
{ ASC | DESC }オプションで、昇順(低い順)または降順(高い順)でソートキーの値を返します。
デフォルト: ASC
NULLS { FIRST | LAST }オプションで、ソート順(ASC または DESC)に基づいて、NULL 値を NULL 以外の値の前後に返すかどうかを指定します。
デフォルト:ソート順(ASC または DESC)に依存します。詳細については、以下の使用上の注意をご参照ください
ALLSELECT リストで指定されたすべての列で結果を並び替えます。結果は、列で表示される順序で並べ替えられます。
たとえば、 SELECT リストには次が含まれます。
SELECT col_1, col_2, col_3 FROM my_table ORDER BY ALL;
結果は最初に
col_1、次にcol_2、最後にcol_3で並び替えられます。注釈
SELECT リストの列で集計関数を使用している場合、ORDERBYALL は指定できません。
使用上の注意¶
すべてのデータは、ASCII テーブルの各文字の数値バイト値に従ってソートされます。UTF-8エンコードがサポートされています。
数値の場合、小数点の前の先行ゼロと小数点の後の後続ゼロ(
0)は、ソート順に影響しません。NULLS FIRST または NULLS LAST が指定されていない場合、NULL 値の順序は DEFAULT_NULL_ORDERING パラメーターの設定とソート順序に依存します。
ソート順が ASC (デフォルト)で、DEFAULT_NULL_ORDERING パラメーターが
LAST(デフォルト)にセットされている場合、NULL の値が最後に返されます。したがって、特に指定がない限り、NULL の値は、NULL 以外の値よりも高いとみなされます。ソート順が ASC で、DEFAULT_NULL_ORDERING パラメーターが
FIRSTにセットされている場合、NULL の値が最初に返されます。ソート順が DESC で、DEFAULT_NULL_ORDERING パラメーターが
FIRSTにセットされている場合、NULL の値が最後に返されます。ソート順が DESC で、DEFAULT_NULL_ORDERING パラメーターが
LASTにセットされている場合、NULL の値が最初に返されます。
異なるデータ型の要素を含む配列など、 半構造化 データ内の異なるデータ型の値に対しては、ソート順の一貫性が保証されません。
Top-Kプルーニングは、 LIMIT と ORDER BY の両方の句を含むクエリのパフォーマンスを向上させることができます。詳細については、 クエリパフォーマンス向上のためのTop-Kプルーニング をご参照ください。
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句を使用しないようにします。
例¶
次の例は、 ORDERBY を使用して結果を並べ替える方法を示しています。
文字列値による並べ替え¶
次の例では、結果を文字列値で並べ替えています。
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 | +---------+ NULLS を最初または最後に並び変える¶
次の例では、 DEFAULT_NULL_ORDERING パラメーターを:code:LAST に設定して、セッション内のすべてのクエリを NULLS を最後に並べ替えるように構成します。
ALTER SESSION SET DEFAULT_NULL_ORDERING = 'LAST'; 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 DESC; +---------+ | COLUMN1 | |---------| | NULL | | NULL | | 3 | | 2 | | 1 | +---------+ 次の例では、クエリで NULLS FIRST を指定して DEFAULT_NULL_ORDERING パラメーターを上書きします。
SELECT column1 FROM VALUES (1), (null), (2), (null), (3) ORDER BY column1 NULLS FIRST; +---------+ | COLUMN1 | |---------| | NULL | | NULL | | 1 | | 2 | | 3 | +---------+ 次の例では、 DEFAULT_NULL_ORDERING パラメーターを FIRST に設定して、 NULLS を最初に並べ替えます。
ALTER SESSION SET DEFAULT_NULL_ORDERING = 'FIRST'; SELECT column1 FROM VALUES (1), (null), (2), (null), (3) ORDER BY column1; +---------+ | COLUMN1 | |---------| | NULL | | NULL | | 1 | | 2 | | 3 | +---------+ SELECT column1 FROM VALUES (1), (null), (2), (null), (3) ORDER BY column1 DESC; +---------+ | COLUMN1 | |---------| | 3 | | 2 | | 1 | | NULL | | NULL | +---------+ 次の例では、クエリで NULLS LAST を指定して DEFAULT_NULL_ORDERING パラメーターを上書きします。
SELECT column1 FROM VALUES (1), (null), (2), (null), (3) ORDER BY column1 NULLS LAST; +---------+ | COLUMN1 | |---------| | 1 | | 2 | | 3 | | NULL | | NULL | +---------+ SELECT リストのすべての列で並べ替えます。¶
このセクションの例を実行するには、次のテーブルを作成します。
CREATE OR REPLACE TABLE my_sort_example(a NUMBER, s VARCHAR, b BOOLEAN); INSERT INTO my_sort_example VALUES (0, 'abc', TRUE), (0, 'abc', FALSE), (0, 'abc', NULL), (0, 'xyz', FALSE), (0, NULL, FALSE), (1, 'xyz', TRUE), (NULL, 'xyz', FALSE); 次の例では、テーブル内にあるすべての列で結果を並べ替えています。
SELECT * FROM my_sort_example ORDER BY ALL; 以下に示すように、結果はで最初に a 列、次に s 列、最後に b 列(テーブルで列が定義された順序)で並べ替えられます。
+------+------+-------+ | A | S | B | |------+------+-------| | 0 | abc | False | | 0 | abc | True | | 0 | abc | NULL | | 0 | xyz | False | | 0 | NULL | False | | 1 | xyz | True | | NULL | xyz | False | +------+------+-------+ 次の例では、結果を昇順に並べ替えています。
SELECT * FROM my_sort_example ORDER BY ALL ASC; +------+------+-------+ | A | S | B | |------+------+-------| | 0 | abc | False | | 0 | abc | True | | 0 | abc | NULL | | 0 | xyz | False | | 0 | NULL | False | | 1 | xyz | True | | NULL | xyz | False | +------+------+-------+ 次の例では、セッション中に実行されるすべてのクエリに対して NULL 値を最後に並べ替えるように DEFAULT_NULL_ORDERING パラメーターを設定します。
ALTER SESSION SET DEFAULT_NULL_ORDERING = 'LAST'; SELECT * FROM my_sort_example ORDER BY ALL; +------+------+-------+ | A | S | B | |------+------+-------| | NULL | xyz | False | | 0 | NULL | False | | 0 | abc | NULL | | 0 | abc | False | | 0 | abc | True | | 0 | xyz | False | | 1 | xyz | True | +------+------+-------+ 次の例では、 NULLSFIRST を指定して、その設定を上書きします。
SELECT * FROM my_sort_example ORDER BY ALL NULLS FIRST; +------+------+-------+ | A | S | B | |------+------+-------| | NULL | xyz | False | | 0 | NULL | False | | 0 | abc | NULL | | 0 | abc | False | | 0 | abc | True | | 0 | xyz | False | | 1 | xyz | True | +------+------+-------+ 次の例では、 b、 s および a の順序で列を返します。結果は最初に b 、次に s 、最後に a で並べ替えられます。
SELECT b, s, a FROM my_sort_example ORDER BY ALL NULLS LAST; +-------+------+------+ | B | S | A | |-------+------+------| | False | abc | 0 | | False | xyz | 0 | | False | xyz | NULL | | False | NULL | 0 | | True | abc | 0 | | True | xyz | 1 | | NULL | abc | 0 | +-------+------+------+