FE EXAM

ORDER BY句(並べ替え)

問合せ結果を指定した列の値で並べ替えるSQLの句。

INTERACTIVE VISUALIZATION
第1キー列
第2キー列
フェーズ
idle
キー列
行数
4
シナリオ
ステップ1 / 5
STEP 1/5並べ替える前の表これは生徒の点数表(テーブル=行と列でできた表)です。SELECT文で取り出しただけでは、行の並び順は保証されません。ここではデータが登録された順番のまま並んでいます。これから ORDER BY 句で「点数の高い順」に並べ替えていきます。
studentsnamegradescoreAoki272Endo188Kato172Sato295
SQL
SELECT name, score
FROM students
解説

📌
ORDER BY句とは

並べ替え前72889560ORDER BY降順に並べ替え後95887260

ORDER BY句とは、問合せ結果(=SELECT文で取り出した行の集まり)を、指定した列の値で並べ替えるSQLの句です。SELECTだけでは行の順番は保証されないため、見やすい順に整えたいときに使います。

身近な例で考えると、名簿を「五十音順」や「点数の高い順」に並べ直す作業に似ています。中身(名前や点数)は変えず、行の並び順だけを入れ替えるイメージです。

上のツールで▶ボタンを押すと、キー列(並べ替えの基準にする列)を選んでから、値を比べて行を入れ替え、最後に並びが完成するまでの流れを確認できます。

↕️
ASC/DESCの違い

並べ替えの「向き」は、キー列のうしろに付けるキーワードで決めます。
ASC(ascending=昇順):小さい順(1, 2, 3… / a, b, c…)。省略時はこちらが既定です
DESC(descending=降順):大きい順(…3, 2, 1 / …c, b, a)

ORDER BY score ASC  -- 低い順
ORDER BY score DESC -- 高い順

文字列の場合は文字コード順(おおむねアルファベット順)に、数値の場合は大小で並びます。「ASCもDESCも書かなければ昇順」という点は覚えておくと安心です。上のツールで「点数の高い順(DESC)」と「点数の低い順(ASC)」を切り替えると、並びがちょうど逆になることが分かります。

🔑
複数キーでの並び替え

第1キー grade ASC第2キー score DESC同じ値のときだけ次のキーへ

ORDER BY のうしろにカンマ(,)で区切って複数の列を書くと、優先順位をつけた並べ替えができます。先に書いた列ほど優先されます。

並べ替えの順序は次のようになります。
第1キー(最初の列):まずこの値で全体を並べる
第2キー(次の列):第1キーが同じ値だった行の中だけで順番を決める
・第3キー以降も同様に、上位キーで決着がつかないときだけ使われる

身近な例で考えると、クラス別の名簿を「クラス順、同じクラスの中は出席番号順」に並べるのと同じです。それぞれの列に ASC / DESC を別々に指定できます。上のツールの「学年→点数の2キー」シナリオで、第1キーで分けてから第2キーで整える二段階の動きを確認できます。

ORDER BYが一番最後に働く理由

FROM表を用意WHERE行を絞るGROUP BY集計SELECT列を選ぶORDER BY並べるORDER BY は最後 — 取り出した全行が揃ってから並べる

ORDER BY は SELECT 文の中で一番最後に処理されます。なぜかというと、並べ替えは「表示する行が全部決まった状態」でないと正しく順番をつけられないからです。WHERE で行を絞り、SELECT で列を選び終えた後、最後に整列して返します。

だから SQL を書く順番も末尾に置くルールになっています。
SELECT 列 FROM 表 WHERE 条件 ORDER BY キー列 の順が基本形です
SELECT で付けた列の別名(AS)を ORDER BY のキー列として使えるのも、SELECT が先に処理されているためです

身近な例で考えると、全員が出席してから名前を五十音順に並べる点呼と同じです。全員が揃う前に並べ始めると、あとから来た人の位置が決まりません。データも同じで、行が確定してから並べるのが自然な流れです。

NULL(空欄)の行はどこに並ぶか

ASC のときDESC のときNULL607288887260NULL

NULL(ヌル)とは、「値が存在しない・未入力」を表す特別な状態です(0や空文字とは別物)。ORDER BY でキー列に NULL がある行を並べると、どこに置くかはデータベース製品によって異なりますが、多くのデータベースでは次のように扱います。
ASC(昇順)のとき:NULL は一番前(最小扱い)に来ることが多い
DESC(降順)のとき:NULL は一番後ろに来ることが多い

なぜかというと、NULL は「値がない」ため、数値や文字列と大小比較ができません。どんな値よりも「最小」か「最大」かはルールが定まっておらず、製品ごとに判断が異なります。

身近な例で考えると、点数が「未記入」の答案のようなものです。0点とも区別され、「何点なのか分からない」という状態です。実際の業務ではNULLを含む列で並べ替えるときに注意が必要ですが、基本は「NULLは比較できない特別な値」と押さえておきましょう。

練習問題

🎯
基本情報技術者 練習問題

Q1.ORDER BY句の役割として最も適切なものはどれか。
A.指定した列の値で問合せ結果の行を並べ替える
B.指定した条件に合う行だけを取り出す
C.行をグループにまとめて集計する
D.2つの表を結合する
Q2.「ORDER BY score DESC」の意味として正しいものはどれか。
A.score列を小さい順(昇順)に並べる
B.score列を大きい順(降順)に並べる
C.score列が最大の行だけを残す
D.score列を削除する
Q3.「ORDER BY grade ASC, score DESC」のように複数の列を指定したときの並べ替え方として正しいものはどれか。
A.score だけで並べ、grade は無視される
B.grade と score を足した値で並べる
C.まず grade の昇順で並べ、grade が同じ行の中だけ score の降順で並べる
D.2つの結果表が別々に作られる

関連コンテンツ