SQLの学習を進めていると、「ORDER BY句ってSELECT文のどこに書くの?ASCとDESCはどっちが省略できるの?」と細かい部分で迷いがちです。
この記事では、ORDER BY句の役割・書き方・試験での出題ポイントを一気に整理します。
対象試験と出題頻度
ORDER BY句は、基本情報技術者・応用情報技術者で出題されるテーマです。
SQLのSELECT文に関する問題の一部として登場し、GROUP BY句やHAVING句との記述順序・役割の違いを正確に区別できるかが問われます。
詳細をクリックして確認
基本情報技術者
応用情報技術者
★★★★☆
ランクA(重要)必ず覚えておくべき
用語の定義
ORDER BY句とは、一言で言うと
「SELECT文で取得した結果を、指定した列の値に従って昇順または降順に並び替える句」
です。
イメージとしては、「テスト返却時の席順指定」です。
先生が「出席番号順に前から取りに来てください」と言えば1番の生徒から順番に呼ばれます。「点数が高い順」と言えば100点の生徒から呼ばれます。
ORDER BY句はこの「どの基準で、どの順番に並べるか」をデータベースに伝える指示書にあたります。
📊 ORDER BY句の基本情報
| 項目 | 内容 |
|---|---|
| 英語名 | ORDER BY clause |
| 所属 | SQLのSELECT文を構成する句の一つ |
| 役割 | 取得結果の並び替え(ソート) |
| 昇順指定 | ASC(省略可。省略時は昇順) |
| 降順指定 | DESC(省略不可) |
解説
SELECT文でデータを取得すると、行の出力順序はDBMSの内部処理に依存するため、毎回同じ順番で返ってくるとは限りません。
「名前のあいうえお順で表示したい」「売上金額の大きい順に並べたい」といった要件を満たすには、明示的に並び替えを指示する必要があります。この指示を担うのがORDER BY句です。
基本構文
ORDER BY句はSELECT文の末尾に記述します。構文は以下の通りです。
SELECT 列名1, 列名2, …
FROM 表名
WHERE 条件式
ORDER BY 列名 [ASC | DESC];
ASCは「Ascending(昇順)」の略で、小さい値から大きい値の順に並べます。
DESCは「Descending(降順)」の略で、大きい値から小さい値の順です。
ここだけは確実に押さえてください。
ASCは省略できるが、DESCは省略できない。省略した場合は自動的に昇順になります。
図解:ASC(昇順)とDESC(降順)
具体的なテーブルデータで並び替えの動きを確認します。
元の「社員」表
| 社員番号 | 名前 | 点数 |
|---|---|---|
| 003 | 佐藤 | 72 |
| 001 | 田中 | 85 |
| 002 | 鈴木 | 90 |
ORDER BY 点数 ASC(昇順)
| 社員番号 | 名前 | 点数 |
|---|---|---|
| 003 | 佐藤 | 72 |
| 001 | 田中 | 85 |
| 002 | 鈴木 | 90 |
↑ 小さい値(72)→ 大きい値(90)
ORDER BY 点数 DESC(降順)
| 社員番号 | 名前 | 点数 |
|---|---|---|
| 002 | 鈴木 | 90 |
| 001 | 田中 | 85 |
| 003 | 佐藤 | 72 |
↑ 大きい値(90)→ 小さい値(72)
複数列での並び替え
ORDER BY句にはカンマ区切りで複数の列を指定できます。
先に書いた列が第1ソートキー、次に書いた列が第2ソートキーとなり、第1キーの値が同じ行同士を第2キーで並べ替えます。
SELECT 部署コード, 社員コード, 名前
FROM 社員表
ORDER BY 部署コード, 社員コード;
この例では、まず部署コードの昇順で並べ、部署コードが同じ行同士は社員コードの昇順で並べます。列の指定順序を入れ替えると結果が変わるため、「どちらを先に書くか」が問われるポイントになります。
図解:複数列ソートの動き
ソート前
| 部署 | 社員 | 名前 |
|---|---|---|
| B | 002 | 鈴木 |
| A | 003 | 佐藤 |
| A | 001 | 田中 |
| B | 001 | 山田 |
ソート後
| 部署 | 社員 | 名前 |
|---|---|---|
| A | 001 | 田中 |
| A | 003 | 佐藤 |
| B | 001 | 山田 |
| B | 002 | 鈴木 |
▲ 第1キー(部署コード)でA→B、同じ部署内は第2キー(社員コード)で001→003の順に並ぶ
SELECT文内での処理順序と記述位置
ORDER BY句はSELECT文のすべての句の中で最後に処理されます。
DBMSの処理順序を把握しておくと、なぜORDER BY句でSELECT句の別名(AS)が使えるのかも理解できます。
SELECT文の処理順序
では、この構文が試験でどのように出題されるか見ていきましょう。
💡 ORDER BY句の核心を3行で
・SELECT文の末尾に記述し、取得結果を指定列で並び替える句
・ASC(昇順)は省略可、DESC(降順)は省略不可。省略時は昇順
・複数列を指定すると、先に書いた列が第1ソートキーになる
試験ではこう出る!
ORDER BY句は、FE・APの科目A(午前)でSQL穴埋め問題の一部として繰り返し出題されています。単独で「ORDER BY句とは何か」と問われることは少なく、GROUP BY句やHAVING句と組み合わせたSELECT文全体の穴埋め・結果推定の中で登場する形式が主流です。
📊 過去問での出題実績
| 試験回 | 出題内容 | 問われたポイント |
|---|---|---|
| FE H31春 午前 問27 |
GROUP BYとORDER BYの組み合わせの穴埋め。クラスごと・教科ごとの平均点を昇順に表示する。 | ・ORDER BYの列指定順序が結果に直結 ・GROUP BY対象列とORDER BY対象列の一致/不一致 |
| AP H22春 午前 問33 |
表Aから実行結果Bを得るSQL文を選ぶ。ORDER BYの列指定順序で正しいものを判定。 | ・第1キー・第2キーの順番が逆だと結果が変わる ・GROUP BYとの取り違えがひっかけ |
| AP R6秋 午前 問30 |
ウィンドウ関数(ROW_NUMBER)のOVER句内でORDER BYを使う穴埋め問題。 | ・OVER句内のORDER BYはパーティション内の行順序を決める ・APレベルではウィンドウ関数との組み合わせも出題範囲 |
📝 IPA試験での出題パターン
パターン1:「GROUP BY + ORDER BYの穴埋め」(最頻出)
SELECT文の空欄にGROUP BY句とORDER BY句を組み合わせた字句を入れる形式。GROUP BYの対象列と、ORDER BYの列指定順序の両方を正しく選ばないと正解にならない。FE H31春 問27がこの典型です。
パターン2:「実行結果から正しいSQL文を逆算する」
表とその実行結果が与えられ、結果を出力するSQL文を選ぶ形式。ORDER BYの列の順番を入れ替えた選択肢がひっかけとして配置される。AP H22春 問33がこの典型です。
ASC/DESCの意味を単独で問う問題はほとんど出ません。試験ではここまででOKです。「ASCは省略可=省略時は昇順」「列の指定順序=ソートの優先順位」の2点を押さえておけば得点に直結します。
【確認テスト】理解度チェック
ここまでの内容を理解できたか、簡単なクイズで確認してみましょう。
Q. 次のSQL文を実行したとき、結果の並び順として正しいものはどれでしょうか?
SELECT 商品名, 価格
FROM 商品
ORDER BY 価格;
- A. 価格が大きい順(降順)に並ぶ。指定を省略した場合はDESCがデフォルトになる。
- B. 商品名の五十音順に並ぶ。ORDER BY句の列名は無視され、SELECT句の先頭列がソートキーになる。
- C. 価格が小さい順(昇順)に並ぶ。ASCを省略した場合、デフォルトは昇順になる。
正解と解説を見る
正解:C
解説:
ORDER BY句でASCもDESCも指定しない場合、デフォルトは昇順(ASC)です。したがって、価格の小さい値から大きい値の順に結果が並びます。
選択肢Aは「省略時はDESCがデフォルト」と述べている点が誤りです。省略時はASC(昇順)がデフォルトであり、降順にしたい場合はDESCを明示的に記述する必要があります。選択肢Bは「SELECT句の先頭列がソートキーになる」と述べている点が誤りです。ソートキーはORDER BY句で指定した列によって決まり、SELECT句の記述順序は無関係です。
よくある質問(FAQ)
Q. ORDER BY句でSELECT句にない列を指定できますか?
指定できます。ORDER BY句はSELECTで取り出す列とは独立に、FROM句で指定した表の任意の列をソートキーにできます。例えば「SELECT 名前 FROM 社員 ORDER BY 社員番号」のように、表示は名前だけでも社員番号で並び替えることが可能です。ただし、DISTINCTを使っている場合やUNIONの結果に対する場合は、SELECT句にある列しか指定できない制約があります。
Q. ORDER BY句とGROUP BY句を混同しないコツはありますか?
役割がまったく異なります。GROUP BYは「同じ値を持つ行をまとめて集約関数(SUMやAVGなど)で集計する」ための句です。一方、ORDER BY句は「集計や絞り込みがすべて終わった最終結果の表示順を決める」ための句です。「GROUP BY=グループ化して計算」「ORDER BY=結果を並び替えて表示」と役割を分けて覚えると混同しなくなります。
Q. ORDER BY句で列番号を指定する書き方は試験に出ますか?
「ORDER BY 2」のようにSELECT句の列の位置番号で指定する書き方はSQL標準で認められていますが、IPA試験では列名で指定する形式がほぼ100%です。列番号指定は可読性が低く実務でも推奨されないため、試験対策としては列名指定のパターンだけ覚えておけば十分です。
Q. NULLを含む列でORDER BYを使うとNULLはどこに並びますか?
SQL標準ではNULLの並び位置は実装依存とされており、DBMS製品によって先頭に来る場合と末尾に来る場合があります。PostgreSQLやOracleではNULLS FIRST / NULLS LASTで明示的に制御できます。IPA試験ではNULLの並び位置を直接問う問題は出題されていないため、深追いは不要です。