バナー画像

SQLのORDER BY句を使用すると、SELECT文で取得したレコード(行)を並び替えることができます。

ORDER BYで、特定の列(キー)の値でレコードを並び替えたり、複数の列の指定して並び替えたりもできます。
また、場合によっては計算式の結果をソートキーに設定することもできます。

SQLやプログラムの世界では、「並び替え」を一般的に「ソート」と呼ぶことが多いため、以降は「ソート」という表記を使用させて頂きます。

ORDER BYの構文

まずは、SQLで昇順/降順でレコードをソートする時に使用する、ORDER BY句の構文を見ていきましょう。

ORDER BY ソートキー [ASC | DESC], ソートキー [ASC | DESC], ...

ソートキーには、並び替え時に使用する列名または式を指定します。

昇順でソートする場合は、ソートキーの後ろにASCを指定します。逆に降順でソートする時は、ソートキーの後ろにDESCを指定します。省略した場合は、ASCを指定した時と同じように昇順でソートが行われます。

ポテパンダの一言メモ

余談ですが、昇順・降順で指定するASC | DESCは次の英語を略したものになります。

ASC: ascending
DESC: descending

レコードを昇順・降順で並び替える

実際に、ORDER BYを使用してレコードを昇順・降順で並び替えるサンプルコードを見ていきましょう。

今回は、次のサンプルテーブル用意して試していきましょう。

▪️ テーブル名:scores

Id Name Rank Score
1 Yamada Taro A 50
2 Suzuki Ichiro A 30
3 Sato Taro B 40
4 Tanaka Jiro B 70
5 Ito Hanako C 100

昇順でソートする

まずは、昇順でレコードをソートする例を解説します。

サンプル表(scoresテーブル)のデータを、Score列の昇順でソートする場合、SQLは次のようになります。

SELECT *
FROM scores
ORDER BY Score

▪️実行結果

| id     | Name          | Rank  | Score |
| ------ | ------------- | ----- | ----- |
| 2      | Suzuki Ichiro | A     | 30    |
| 3      | Sato Taro     | B     | 40    |
| 1      | Yamada Taro   | A     | 50    |
| 4      | Tanaka Jiro   | B     | 70    |
| 5      | Ito Hanako    | C     | 100   |

SQLを実行すると、Score列の昇順でレコードがソートされていることが分かります。

降順でソートする

続いて降順でレコードをソートする例を解説します。

降順でソートを行う場合は、ORDER BYでソートを行うカラムの後ろにDESCを付けます。

SELECT *
FROM scores
ORDER BY Score DESC

複数のキーでソートする

複数のキー(カラム)を指定して、ORDER BYでソートを行う場合は、カンマ区切りでカラム名を指定します。

複数のキーを指定した場合のソートの優先順は、カンマ区切りで先に書いたカラムから順にソートが行われます。

scoresテーブルを、ランクと次にスコアの降順でソートするSQLを見てみましょう。

SELECT *
FROM scores
ORDER BY Rank, Score DESC

▪️実行結果

| id     | Name          | Rank  | Score |
| ------ | ------------- | ----- | ----- |
| 1      | Yamada Taro   | A     | 50    |
| 2      | Suzuki Ichiro | A     | 30    |
| 4      | Tanaka Jiro   | B     | 70    |
| 3      | Sato Taro     | B     | 40    |
| 5      | Ito Hanako    | C     | 100   |

グループ化(GROUP BY)した結果を並び替える

GROUP BYでデータを集約した結果を、ORDER BYでソートすることもできます。
例えば、売上を集計した後に集計した金額でソートするなど、さまざまな場面で活用できます。

先ほどに引き続き、scoresテーブルを使って、ランク毎のScoreを集計し、集計したScore列の降順でデータをソートしてみましょう。

SELECT Rank
     , Score
FROM scores
GROUP BY Rank
ORDER BY Score DESC

▪️実行結果

| Rank  | Score |
| ----- | ----- |
| B     | 110   |
| B     | 100   |
| A     | 80    |

NULLデータの扱い

ここからは、ORDER BYNULLのデータを並び替える時の動作を解説します。

実は、ソート時のNULLの扱いはデータベースによって挙動が異なり、NULLを最小値とするデータベースもあったり、NULLを最大値として扱うデータベースもあります。

NULLを最小値として扱うデータのベースの場合、ORDER BYでソートを行うとNULLが先頭に来るように並び替えが行われます。

SQL> SELECT Id, Score FROM scores ORDER BY Score

| Id    | Score    |
| ----- | -------- |
| 1     | (NULL)   |
| 2     | 40       |
| 3     | 70       |

逆に、NULLを最大値として扱うデータベースの場合、ORDER BYでソートを行うとNULLが最後尾に来るように並び替えされます。

SQL> SELECT Id, Score FROM scores ORDER BY Score

| Id    | Score    |
| ----- | -------- |
| 2     | 40       |
| 3     | 70       |
| 1     | (NULL)   |

このように、NULLの扱いはデータベースによって異なるため、注意が必要です。
主なデータベースのNULLデータの扱いは次の表の通りです。

データベース(RDBMS) NULLの扱い
SQL SERVER 最小値
Oracle 最大値
PostgreSQL 最大値
MySQL 最小値

NULLの並び順を指定する(NULLS LAST/FIRST)

一部のデータベースにでは、ORDER BYでソートを行う時に、NULLS FIRSTまたはNULLS LASTを指定して、NULLのソート位置を制御できます。

NULLS FIRSTを指定すると、NULLを最小値として扱い先頭に並び替えます。NULLS LASTを指定すると、NULLを最大値として扱い、最後尾にレコードを並び替えます。

まとめ

SQLのORDER BY句を使用して、レコードを昇順・降順で並び替え(ソート)する方法について解説してきました。ORDER BY`によるソートはSQLおける基本知識ですので、是非覚えておきましょう。

【関連記事】
SQLで重複データをまとめる方法を確認しよう!【DISTINCT/GROUP BY】

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。