カテゴリ:

クエリ構文

ORDER BY

SELECT リストからの結果テーブルの行の順序を指定します。

構文

特定の列による並べ替え

SELECT ...
  FROM ...
  ORDER BY orderItem [ , orderItem , ... ]
  [ ... ]
Copy

条件:

orderItem ::= { <column_alias> | <position> | <expr> } [ { ASC | DESC } ] [ NULLS { FIRST | LAST } ]
Copy

すべての列による並べ替え

SELECT ...
  FROM ...
  ORDER BY ALL [ { ASC | DESC } ] [ NULLS { FIRST | LAST } ]
  [ ... ]
Copy

パラメーター

column_alias

クエリブロックの SELECT リストに表示される列エイリアス。

position

SELECT リスト内の式の位置。

expr

現在のスコープ内のテーブルの式。

{ 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;
Copy

結果は最初に 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
      );
    
    Copy

    この例では、サブクエリで 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;
Copy
+---------------+
| 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;
Copy
+---------+
| 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';
Copy
SELECT column1
  FROM VALUES (1), (null), (2), (null), (3)
  ORDER BY column1;
Copy
+---------+
| COLUMN1 |
|---------|
|       1 |
|       2 |
|       3 |
|    NULL |
|    NULL |
+---------+
SELECT column1
  FROM VALUES (1), (null), (2), (null), (3)
  ORDER BY column1 DESC;
Copy
+---------+
| 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;
Copy
+---------+
| COLUMN1 |
|---------|
|    NULL |
|    NULL |
|       1 |
|       2 |
|       3 |
+---------+

次の例では、 DEFAULT_NULL_ORDERING パラメーターを FIRST に設定して、 NULLS を最初に並べ替えます。

ALTER SESSION SET DEFAULT_NULL_ORDERING = 'FIRST';
Copy
SELECT column1
  FROM VALUES (1), (null), (2), (null), (3)
  ORDER BY column1;
Copy
+---------+
| COLUMN1 |
|---------|
|    NULL |
|    NULL |
|       1 |
|       2 |
|       3 |
+---------+
SELECT column1
  FROM VALUES (1), (null), (2), (null), (3)
  ORDER BY column1 DESC;
Copy
+---------+
| 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;
Copy
+---------+
| 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);
Copy

次の例では、テーブル内にあるすべての列で結果を並べ替えています。

SELECT * FROM my_sort_example
  ORDER BY ALL;
Copy

以下に示すように、結果はで最初に 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;
Copy
+------+------+-------+
| 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';
Copy
SELECT * FROM my_sort_example
  ORDER BY ALL;
Copy
+------+------+-------+
| 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;
Copy
+------+------+-------+
| A    | S    | B     |
|------+------+-------|
| NULL | xyz  | False |
| 0    | NULL | False |
| 0    | abc  | NULL  |
| 0    | abc  | False |
| 0    | abc  | True  |
| 0    | xyz  | False |
| 1    | xyz  | True  |
+------+------+-------+

次の例では、 bs および a の順序で列を返します。結果は最初に b 、次に s 、最後に a で並べ替えられます。

SELECT b, s, a FROM my_sort_example
  ORDER BY ALL NULLS LAST;
Copy
+-------+------+------+
| B     | S    | A    |
|-------+------+------|
| False | abc  | 0    |
| False | xyz  | 0    |
| False | xyz  | NULL |
| False | NULL | 0    |
| True  | abc  | 0    |
| True  | xyz  | 1    |
| NULL  | abc  | 0    |
+-------+------+------+