⬆️⬇️ 「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)の指定
並び替えの方向は、以下のキーワードで指定します。
【例】Last Name(姓)を降順に並び替える
SELECT FirstName, LastName
FROM Sales.vIndividualCustomer
ORDER BY LastName DESC;
-- 実行結果は、ZからAの順に並んだ姓になる。
🏷️ 第2章:並び替え基準の指定方法(3つの方法)
ORDER BY句では、並び替えの基準となる列を、以下の3つの方法のいずれかで指定できます。
【例】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がクエリを評価する順番に関係します。
ORDER BYが評価されるときには、すでにその直前で SELECT句が評価されています。そのため、ORDER BYはSELECT句で定義された別名や順序を認識して使用できるのです。
一方、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;
👉 結果の確認:
最も高い
SalesQuotaを持つ人が先頭に来ます。もし
SalesQuotaが同じ人が複数いる場合、その人たちはLastNameのA→Z順に並べられます。
3-1. フィルタリング(WHERE句)との組み合わせ
もちろん、WHERE句で絞り込んだ結果を並び替えることも可能です。WHEREとORDER 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)」の概念が不可欠です。
