単一列・複数列のORDER BY
結果を昇順または降順に並べ替え、複数列でソートし、NULLS FIRST / NULLS LASTでNULLの位置を制御します。
「単一列・複数列のORDER BY」はCoddyKit上の無料SQL Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSQL Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 SQL Academyコースには全4レッスンが含まれています。
ORDER BYが必要な理由
SQLのテーブルは順序を持たない集合です。ORDER BYがなければ、データベースは任意の順序で行を返す可能性があり、その順序は実行ごとに変わることがあります。UIやレポートで順序が重要な場合は、明示的にソートしてください。
1つの列によるソート
デフォルトのソート順は昇順です。
SELECT id, email FROM users ORDER BY created_at; -- oldest first
SELECT id, email FROM users ORDER BY created_at ASC;
SELECT id, email FROM users ORDER BY created_at DESC; -- newest first複数の列によるソート
列を優先順位の順に並べます。2番目の列は、1番目の列の同値をさらに区別します。
SELECT first_name, last_name, age
FROM users
ORDER BY last_name ASC, first_name ASC, age DESC;式によるソート
任意の式でソートできます。
SELECT email, full_name
FROM users
ORDER BY LENGTH(email) DESC, email ASC;エイリアスまたは位置によるソート
SELECTリストのエイリアス、または1から始まる位置番号を参照できます。
SELECT id, total * 0.9 AS discounted
FROM orders
ORDER BY discounted DESC; -- by alias
SELECT id, total
FROM orders
ORDER BY 2 DESC; -- by position (avoid in code — fragile)NULLS FIRST / NULLS LAST
NULLをどこに配置するかを制御できます。
-- Default: NULLs LAST when ASC, FIRST when DESC
SELECT * FROM users ORDER BY last_login_at DESC NULLS LAST;
SELECT * FROM users ORDER BY last_login_at ASC NULLS FIRST;安定したソートとタイブレーカー
複数の行がソートキーで同値の場合、データベースはそれらを任意の順序で返す可能性があります。決定的な結果にするには、タイブレーカーとして主キーを追加してください。
SELECT * FROM orders
ORDER BY created_at DESC, id DESC;ORDER BYとインデックス
ORDER BYの列にインデックスが存在する場合、データベースはソート処理を行わず、順序どおりに行を読み取れます。
-- With index on created_at DESC, this can use the index directly:
SELECT * FROM events ORDER BY created_at DESC LIMIT 100;ORDER BYでのCASE
CASEを使って独自の順序を指定できます。
-- Show priority orders first:
SELECT * FROM orders
ORDER BY
CASE status
WHEN 'urgent' THEN 0
WHEN 'normal' THEN 1
ELSE 2
END,
created_at DESC;ORDER BYはWHEREの後に実行される
ORDER BYはWHERE、GROUP BY、HAVINGの結果に対して処理されます。まずフィルタリングが行われ、その後にソートされます。
LIMITなしで巨大なテーブルをソートしない
10億行の結果をソートするには大きなコストがかかります。上位N件だけが必要なら、LIMITを追加してください。プランナーはTop-N戦略に切り替えられます。
SELECT * FROM events ORDER BY created_at DESC LIMIT 50;まとめ
ORDER BYにより、結果の順序を決定的にできます。
- 列ごとにASC / DESCを指定する
- 複数の列で同値を区別する
- 必要に応じてNULLS FIRST / LASTを指定する
- 大規模なソートには必ずLIMITを組み合わせる
クイックチェック
SQLにおけるデフォルトのソート方向はどちらですか。
よくある質問
「単一列・複数列のORDER BY」レッスンは無料ですか?
はい。「単一列・複数列のORDER BY」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、SQL Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 SQL Academyコースには全4レッスンが含まれています。
「単一列・複数列のORDER BY」で何を学びますか?
結果を昇順または降順に並べ替え、複数列でソートし、NULLS FIRST / NULLS LASTでNULLの位置を制御します。 ブラウザで直接実行するハンズオンコードでSQL Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
SQL Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのSQL Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「単一列・複数列のORDER BY」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このSQL Academyレッスンでコードを書いて実行できますか?
はい。すべてのSQL Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 列と式の選択
- WHEREフィルター:比較演算子と論理演算子
- 単一列・複数列のORDER BY
- LIMIT、OFFSETとページネーションの基礎