ここでは検索結果の並び替えを行う order by
句について学習していきましょう。select
文に order by
句を指定することで検索結果の並び順を制御できます。
order by 列名, ...
order by
句は ,
カンマで区切って複数の列名を指定できます。この場合、先頭に指定した列から順に並び替えが行われます。
またorder by
句はデフォルトで指定した列の値を昇順に出力します。ここでいう昇順とは、列の値の小さいものから順に並べることを意味します。反対に大きいものから順に並べることを降順と呼びます。order by
句で降順を指定する場合は desc
キーワードを付与します。
order by 列名 desc, ...
昇順であることを明示するために asc
キーワードを利用することもできます。
order by 列名 asc, ...
asc
キーワードは省略されることが多いです。
並び替え - 昇順
次のSQLは courses
テーブルから検索した結果を learning_time
列の値の昇順で出力します。
MariaDB [eldb]> select * from courses order by learning_time;
+----+-----------------+---------------+-------------+
| id | title | learning_time | category_id |
+----+-----------------+---------------+-------------+
| 1 | PHP Basic | 30 | 1 |
| 3 | Python Basic | 40 | 1 |
| 2 | PHP Database | 50 | 1 |
| 4 | Web Design | 50 | 2 |
| 5 | Japan's History | 100 | NULL |
+----+-----------------+---------------+-------------+
5 rows in set (0.00 sec)
MariaDB [eldb]>
learning_time
列の値の小さいものから順に出力されていることがわかります。
並び替え - 降順
次のSQLは courses
テーブルから検索した結果を learning_time
列の値の降順で出力します。
MariaDB [eldb]> select * from courses order by learning_time desc;
+----+-----------------+---------------+-------------+
| id | title | learning_time | category_id |
+----+-----------------+---------------+-------------+
| 5 | Japan's History | 100 | NULL |
| 2 | PHP Database | 50 | 1 |
| 4 | Web Design | 50 | 2 |
| 3 | Python Basic | 40 | 1 |
| 1 | PHP Basic | 30 | 1 |
+----+-----------------+---------------+-------------+
5 rows in set (0.00 sec)
MariaDB [eldb]>
learning_time
列の値の大きいものから順に出力されていることがわかります。
並び替え - 複数列の指定
order by
句には,
カンマで区切って複数の列を指定できます。次のSQLは courses
テーブルから検索した結果を learning_time
の降順で並べ替え、値の等しいものは category_id
の降順で並び替えを行います。
MariaDB [eldb]> select * from courses
-> order by learning_time desc, id desc;
+----+-----------------+---------------+-------------+
| id | title | learning_time | category_id |
+----+-----------------+---------------+-------------+
| 5 | Japan's History | 100 | NULL |
| 4 | Web Design | 50 | 2 |
| 2 | PHP Database | 50 | 1 |
| 3 | Python Basic | 40 | 1 |
| 1 | PHP Basic | 30 | 1 |
+----+-----------------+---------------+-------------+
5 rows in set (0.00 sec)
MariaDB [eldb]>
learning_time
列の値が 50
のレコードが2件存在しますが、この2件のレコードは category_id
の降順で並び替えが行われていることがわかります。