SQLの学習を進めていると、「ORDER BY句ってSELECT文のどこに書くの?ASCとDESCはどっちが省略できるの?」と細かい部分で迷いがちです。

この記事では、ORDER BY句の役割・書き方・試験での出題ポイントを一気に整理します。

対象試験と出題頻度

ORDER BY句は、基本情報技術者・応用情報技術者で出題されるテーマです。

SQLSELECT文に関する問題の一部として登場し、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 部署コード, 社員コード;

この例では、まず部署コードの昇順で並べ、部署コードが同じ行同士は社員コードの昇順で並べます。列の指定順序を入れ替えると結果が変わるため、「どちらを先に書くか」が問われるポイントになります。

図解:複数列ソートの動き

ソート前

部署 社員 名前
B002鈴木
A003佐藤
A001田中
B001山田

ソート後

部署 社員 名前
A001田中
A003佐藤
B001山田
B002鈴木

▲ 第1キー(部署コード)でA→B、同じ部署内は第2キー(社員コード)で001→003の順に並ぶ

SELECT文内での処理順序と記述位置

ORDER BY句はSELECT文のすべての句の中で最後に処理されます。

DBMSの処理順序を把握しておくと、なぜORDER BY句でSELECT句の別名(AS)が使えるのかも理解できます。

SELECT文の処理順序

① FROM 表を指定
② WHERE 行を絞り込む
③ GROUP BY グループ化
④ HAVING グループを絞り込む
⑤ SELECT 列を取り出す
⑥ ORDER BY 並び替え← 最後

では、この構文が試験でどのように出題されるか見ていきましょう。

💡 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の並び位置を直接問う問題は出題されていないため、深追いは不要です。