結果の順序付け

ORDER BY句を使用して、主キー列または主キー以外の列を基準として結果を順序付けします。

ノート:

ORDER BYを使用できるのは、表の主キーを使用して選択する場合、または表の行を目的の順序でソートする索引がある場合のみです。

主キー列(ID)を使用して順序付けするには、ORDER BY句でソート列を指定します。

sql-> SELECT id, lastname FROM Users ORDER BY id;
 +----+----------+
 | id | lastname |
 +----+----------+
 |  1 | Morrison |
 |  2 | Anderson |
 |  3 | Morgan   |
 |  4 | Smith    |
 |  5 | Scully   |
 +----+----------+

5 rows returned 

主キー以外の列を基準に順序付けする場合は、最初に対象の列の索引を作成します。たとえば、順序付けにlastname列を使用するには、その列の索引を作成してから、ORDER BY句でその列を使用します。

sql-> CREATE INDEX idx1 on Users(lastname);
Statement completed successfully
sql-> SELECT id, lastname FROM Users ORDER BY lastname;
 +----+----------+
 | id | lastname |
 +----+----------+
 |  2 | Anderson |
 |  3 | Morgan   |
 |  1 | Morrison |
 |  5 | Scully   |
 |  4 | Smith    |
 +----+----------+

5 rows returned 

この例のデータを使用する場合は、該当する列の索引を作成することで、複数の列を基準として順序付けできます。(表で主キーに複数の列を使用している場合は、主キーを使用して複数の列を基準として順序付けできます。)たとえば、年齢と収入を基準としてユーザーを順序付けするには、次のようにします。

sql-> CREATE INDEX idx2 on Users(age, income);
Statement completed successfully
sql-> SELECT id, lastname, age, income FROM Users ORDER BY age, income;
 +----+----------+-----+--------+
 | id | lastname | age | income |
 +----+----------+-----+--------+
 |  1 | Morrison |  25 | 100000 |
 |  2 | Anderson |  35 | 100000 |
 |  4 | Smith    |  38 |  80000 |
 |  3 | Morgan   |  38 |   NULL |
 |  5 | Scully   |  47 | 400000 |
 +----+----------+-----+--------+

5 rows returned 

列を使用する順序で2つの列から単一の索引を作成する場合(この例ではage、incomeの順)、一定の制限があります。最初の列名(age)は、新しい索引の主ソート項目になります。idx2索引を使用して、ageのみを基準に順序付けすることはできますが、incomeのみを基準として、または最初にincome、次にageを基準として順序付けすることはできません。

sql-> SELECT id, lastname, age from Users ORDER BY age;
 +----+----------+-----+
 | id | lastname | age |
 +----+----------+-----+
 |  1 | Morrison |  25 |
 |  2 | Anderson |  35 |
 |  4 | Smith    |  38 |
 |  3 | Morgan   |  38 |
 |  5 | Scully   |  47 |
 +----+----------+-----+

5 rows returned 

索引についてさらに学習するには、索引の操作を参照してください。

デフォルトでは、ソートは昇順で実行されます。降順でソートするには、ORDER BY句でDESCキーワードを使用します。

sql-> SELECT id, lastname FROM Users ORDER BY id DESC;
 +----+----------+
 | id | lastname |
 +----+----------+
 |  5 | Scully   |
 |  4 | Smith    |
 |  3 | Morgan   |
 |  2 | Anderson |
 |  1 | Morrison |
 +----+----------+

5 rows returned