結果の順序付け
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