3. MS SQL 「ORDER BY句」徹底ガイド

 


⬆️⬇️ 「ORDER BY句」徹底ガイド

皆さん、こんにちは!

これまでのレッスンで、データを取り出し(SELECT)、どこから取得するか(FROM)、そして特定の行に絞り込む(WHERE)方法を学びました。

今回は、取得したデータを美しく、見やすい順序に並び替えるための「ORDER BY句」を紹介します。


📋 第1章:ORDER BY句の基本と構文

ORDER BY句は、クエリの結果セット全体を、指定した列の値を基準に並び替える役割を持ちます。

1-1. SQL文における記述順序

ORDER BYは、SQL文の中で最後に記述される句です。

SELECT
    [カラム名], ...
FROM
    [テーブル名]
WHERE
    [条件];
ORDER BY
    [並び替えの基準となる列] [昇順/降順]; -- ★必ず最後に書く

1-2. 昇順(ASC)と降順(DESC)の指定

並び替えの方向は、以下のキーワードで指定します。

キーワード意味補足
ASC昇順 (Ascending)📝 小さい 大きい (A Z, 1 10)。 💡 省略した場合のデフォルトはこれ。
DESC降順 (Descending)📈 大きい 小さい (Z A, 10 1)。

【例】Last Name(姓)を降順に並び替える

SELECT FirstName, LastName
FROM Sales.vIndividualCustomer
ORDER BY LastName DESC;
-- 実行結果は、ZからAの順に並んだ姓になる。

🏷️ 第2章:並び替え基準の指定方法(3つの方法)

ORDER BY句では、並び替えの基準となる列を、以下の3つの方法のいずれかで指定できます。

指定方法説明
1. 列名カラムの実際の名前をそのまま使う。ORDER BY LastName
2. カラム別名 (Alias)SELECT句ASを使って付けた別名を使う。ORDER BY [Customer Last Name]
3. 列の順序(Ordinal)SELECT句左から数えた順番(1, 2, 3...)を使う。ORDER BY 2 (2番目の列で並び替える)

【例】3つの方法すべてを使う

SELECT
    FirstName AS [Customer First Name], -- 1. 列の別名
    LastName                             -- 2. 実際の列名
FROM Sales.vIndividualCustomer
ORDER BY [Customer First Name], 2 DESC;
-- 1列目(FirstNameの別名)で昇順に並び替え、その後2列目(LastName)で降順に並び替える。

💡 なぜORDER BYだけ別名や順序が使えるのか?

これはSQLがクエリを評価する順番に関係します。

記述順序 (あなたが書く順)実際の評価順序 (SQLが処理する順)
FROMFROM (テーブル特定)
WHEREWHERE (行を絞り込む)
GROUP BYGROUP BY (集計・グルーピング)
HAVINGHAVING (集計結果を絞り込む)
SELECTSELECT (列の特定、別名付与)
ORDER BYORDER BY (並び替え)

ORDER BYが評価されるときには、すでにその直前で SELECT句が評価されています。そのため、ORDER BYSELECT句で定義された別名順序を認識して使用できるのです。

一方、WHERE句SELECT句より先に評価されるため、まだ別名が定義されておらず、使用するとエラーになります。


🤝 第3章:複数の列で並び替える(優先順位)

複数の列を指定することで、「まずA列で並び替えて、A列の値が同じ場合はB列で並び替える」という細かいソートが可能です。

列の間はコンマ , で区切ります。

【例】売上クォータで降順 Last Nameで昇順に並び替え

SELECT LastName, FirstName, SalesQuota
FROM Sales.vSalesPerson

-- 1. SalesQuotaで降順 (大きい順)
-- 2. SalesQuotaが同じ場合は、LastNameで昇順 (A-Z順)
ORDER BY SalesQuota DESC, LastName ASC;

👉 結果の確認:

  1. 最も高いSalesQuotaを持つ人が先頭に来ます。

  2. もしSalesQuotaが同じ人が複数いる場合、その人たちはLastNameのA→Z順に並べられます。

3-1. フィルタリング(WHERE句)との組み合わせ

もちろん、WHERE句で絞り込んだ結果を並び替えることも可能です。WHEREORDER BYを組み合わせても、ORDER BYの構文自体に変更はありません。

SELECT LastName, FirstName, SalesQuota
FROM Sales.vSalesPerson
WHERE SalesQuota >= 250000 -- 1. まず売上クォータが25万以上の行に絞り込み
ORDER BY SalesQuota DESC, LastName ASC; -- 2. 絞り込んだ結果を並び替える

次回の予告:

このORDER BY句までで、基本的なクエリの要素はすべて学びました。しかし、データベースの本当の力を引き出すためには、「結合(JOIN)」の概念が不可欠です。