0Pricing
SQL Academy · レッスン

単一列・複数列の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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 列と式の選択
  2. WHEREフィルター:比較演算子と論理演算子
  3. 単一列・複数列のORDER BY
  4. LIMIT、OFFSETとページネーションの基礎
← SQL Academyに戻る