今回は、SQLのSELECT区で結果を抽出する際のデータの順番を並べ替えるORDER BYについて説明します。
通常、何らかの目的があってデータベースから抽出するデータは、「金額が高い順」や「会員登録日が古い順」など、目的に沿った順番で並べ替えて抽出することで、その後の加工の手間が省けることが多いです。
特に、基本的にRDBMSでは、レコードの並び順を保証しておらずExcelのように登録順に並んでいる訳でもありません。
SQLで抽出結果の並べ替えをするには、ORDER BY区を使います。
この記事では、RDBMSからの抽出結果のデータを並べ替えるORDER BY区について、基本文法と実例を説明します。
抽出結果を並べ替えるORDER BY
この章では、RDBMSからの抽出結果をSQL文で並べ替えする際のORDER BY区の基本的な書き方を説明します。
基本文法
昇順で並べ替える
SELECT * FROM テーブル名 ORDER BY 並べ替え対象の列名 ASC;
降順で並べ替える
SELECT * FROM テーブル名 ORDER BY 並べ替え対象の列名 DESC;
ORDER BYのデフォルトの並び順は昇順です。昇順で並べ替えをするのであれば、SQL文末尾の[ASC]は省略することができます。
実際のSQL
- テーブル名・・・・Zipcode
- 並べ替え対象の列名・・・・city_kana
たとえば、テーブル[Zipcode]のすべての列を抽出する際、列[city_kana]を対象に昇順で並べ替えする場合には、下記のようにSQL文を記述します。
SELECT * FROM Zipcode ORDER BY city_kana ASC;
MySQLのORDER BYの実例
PostgreSQLのORDER BYの実例
複数要素のORDER BY
これは、SQLに限ったことではなく、Excelやその他多数のソフトウェア系でも一緒ですが、並べ替えのキーは必ずしも単一行とは限りません。
ORDER BY区でも、複数要素の並べ替えを命令することができます(要素とは列のことです。第一優先、第二優先というように順位付けされます)。
複数要素の文法
昇順で並べ替える
SELECT * FROM テーブル名 ORDER BY 並べ替え対象の第一列名 ASC,・・第二列名 ASC;
降順で並べ替える
SELECT * FROM テーブル名 ORDER BY 並べ替え対象の第一列名 DESC,・・第二列名 DESC;
実際のSQL
- テーブル名・・・・Zipcode
- 第一優先の列名・・・・city_kana
- 第二優先の列名・・・・town_kana
たとえば、テーブル[Zipcode]のすべての列を抽出する際、列[city_kana]を並べ替えの第一優先、列[town_kana]を第二優先に、それぞれを昇順で並べ替えする場合には、下記のようにSQL文を記述します。
SELECT * FROM Zipcode ORDER BY city_kana ASC,town_kana ASC;
MySQLのORDER BY(複数要素)の実例
PostgreSQLのORDER BY(複数要素)の実例
WHEREとORDER BYの組み合わせ
この記事の最後は、WHEREとORDER BYの組み合わせについてです。以前の記事で、SQLのWHERE区は最も使われる修飾語と説明しましたが、ORDER BYとの組み合わせもSQLの基本構文のひとつです。
WHEREとORDER BYの文法
昇順で並べ替える
SELECT * FROM テーブル名 WHERE 検索条件
ORDER BY 並べ替え対象の第一列名 ASC,・・第二列名 ASC;
降順で並べ替える
SELECT * FROM テーブル名 WHERE 検索条件
ORDER BY 並べ替え対象の第一列名 DESC,・・第二列名 DESC;
このように、SELECT・FROM・WHERE・ORDER BYの順序で記述します。
実際のSQL
- テーブル名・・・・Zipcode
- 検索条件・・・postcodeが0101605未満
- 並べ替え対象の列名・・・・town_kana
たとえば、テーブル[Zipcode]から列[postcode]が0101605未満のデータを抽出する際、列[town_kana]で並べ替えする場合には、下記のようにSQL文を記述します。
SELECT * FROM Zipcode WHERE postcode < 0101605 ORDER BY town_kana;
MySQLのWHEREとORDER BY組み合わせの実例
PostgreSQLのWHEREとORDER BY組み合わせの実例
当記事の趣旨とは異なりますが、PostgreSQLでは、文字列型に比較演算子を使う場合には、キャスト(明示的な型変換)が必要になります。改めて、別記事で説明します。
あとがき
今回は、RDBMSからSQLでデータを抽出する際に、並べ替えをするためのORDER BY区について記事にしました。
基本的な文法から、頻出するWHERE区との組み合わせについても実例を用いて説明しましたので、ご理解いただけたのではないでしょうか。
SQLでは、このように4大命令語と様々な修飾語を組み合わせることで、用途に応じたデータを使いやすい状態で抽出することができるようになります。