ここでは検索結果の並び替えを行う 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 の降順で並び替えが行われていることがわかります。