SQLite | ゼロからはじめるSQL、30日で習得するSQLite:検索力強化 - Day8 並び替え

SQL SQLite
スポンサーリンク

Day8 前半

「どの順番で見るか」をコントロールできるようになる日

Day7 までで、
どの行を取るか(WHERE)
どの列を見るか(SELECT)
はコントロールできるようになりました。

Day8 では、そこにもう一つ大事な軸――
「どの順番で並べて見るか」
を加えます。

ここで登場するのが ORDER BY です。
検索結果を「若い順」「高い順」「新しい順」などに並べ替えられるようになると、一気に“検索っぽさ”が増します。


ORDER BY の役割

「結果セットに“並び順”という意味を与える」

SELECT は、条件に合う行を集めてきますが、
「どの順番で返すか」は指定しない限り保証されません。

つまり、

SELECT * FROM users;
SQL

と書いたとき、たまたま id 順に見えることもありますが、
それは「たまたまそうなっているだけ」であって、
「id 順にしてくれ」とは一言も頼んでいない 状態です。

ここに「ちゃんと順番を指定する」のが ORDER BY です。

基本形はこうです。

SELECT 列名一覧
FROM   テーブル名
[WHERE 条件]
ORDER BY 並べ替えに使う列 [ASC | DESC];
SQL

ORDER BY のあとに「どの列を基準に並べるか」を書き、
さらに「昇順(小さい→大きい)」「降順(大きい→小さい)」を指定します。


昇順(ASC)の基本

「小さいものから大きいものへ」「あいうえお順・アルファベット順」

昇順は英語で ascending。
SQL では ASC と書きます(省略も可能ですが、最初は書いておくのがおすすめです)。

数値なら「小さい → 大きい」。
文字列なら「辞書順(あいうえお順・アルファベット順)」。

たとえば、次のような users テーブルがあるとします。

id | name       | age
---+------------+----
 3 | 鈴木一郎   | 30
 1 | 山田太郎   | 25
 4 | 高橋健     | 22
 2 | 佐藤花子   | 19

このとき、「年齢の若い順に並べたい」と思ったら、こう書きます。

SELECT * FROM users
ORDER BY age ASC;
SQL

結果はこうなります。

id | name       | age
---+------------+----
 2 | 佐藤花子   | 19
 4 | 高橋健     | 22
 1 | 山田太郎   | 25
 3 | 鈴木一郎   | 30

ここで大事なのは、
「WHERE で絞り込んだ“あと”の結果に対して順番をつけている」
という感覚です。


降順(DESC)の基本

「大きいものから小さいものへ」「新しいものから古いものへ」

降順は英語で descending。
SQL では DESC と書きます。

数値なら「大きい → 小さい」。
日付やIDなら「新しい → 古い」として使うことが多いです。

先ほどと同じ users テーブルで、「年齢の高い順に並べたい」ときはこうです。

SELECT * FROM users
ORDER BY age DESC;
SQL

結果はこうなります。

id | name       | age
---+------------+----
 3 | 鈴木一郎   | 30
 1 | 山田太郎   | 25
 4 | 高橋健     | 22
 2 | 佐藤花子   | 19

ASCDESC は、
「どちらがデフォルトか」よりも、
「自分が今、どちらの向きで見たいのか」を意識して選ぶ
ことが大事です。


WHERE と ORDER BY を組み合わせる

「まず絞ってから、並べる」が基本の流れ

Day5・Day6 でやった WHERE と組み合わせると、
「条件に合う人だけを取り出し、その中で順番をつける」
ということができます。

たとえば、

「20歳以上のユーザーだけを、年齢の高い順に見たい」

これは、
条件:age >= 20
並び順:age DESC
という組み合わせです。

SELECT * FROM users
WHERE age >= 20
ORDER BY age DESC;
SQL

この「WHERE → ORDER BY」という順番は、
SQL を書くときの“お作法”として体に入れておくと、
読みやすさも安全性も上がります。


並び順を意識することのセキュリティ的な意味

「一番上に何が来るか」は、ときに“意味”を持つ

検索結果の「一番上」に何が来るかは、
ユーザーの目に最初に触れる、という意味でとても重要です。

たとえば管理画面で、

SELECT * FROM users;
SQL

だけを書いていて、たまたま古い順に並んでいると、
「最近登録したユーザーがどこにいるか分からない」状態になります。

逆に、

SELECT * FROM users
ORDER BY id DESC;
SQL

としておけば、「新しく登録されたユーザー」が上に来ます。
これは運用上の安全性にもつながります。

また、ログや監査用の画面では、
「新しいものから順に見る」
「特定の条件に合うものを、危険度の高い順に見る」
といった並び替えが、異常検知やインシデント対応のスピードに直結します。


Day8 前半のまとめ

ORDER BY は、「検索結果に対して並び順を指定する」ための句。
ASC は昇順(小さい→大きい、あ→ん)、DESC は降順(大きい→小さい、新しい→古い)。
WHERE で絞り込んだあとに ORDER BY で並べる、という流れが基本。
「一番上に何が来るか」を意識して並び順を決めることは、使いやすさだけでなく、安全性にも関わる。

後半では、
複数列での並び替え(年齢が同じときは名前順、など)、
昇順・降順を混ぜた実践的な例、
「並び順がおかしいときにどこを疑うか」
といったところまで踏み込んでいきます。

タイトルとURLをコピーしました