- カテゴリ:
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)に依存します。詳細については、以下の使用上の注意をご参照ください
ALL
SELECT リストで指定されたすべての列で結果を並び替えます。結果は、列で表示される順序で並べ替えられます。
たとえば、 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 |
+-------+------+------+