Categories: SQL言語

SQL│ORDER BYで抽出結果を並び替え。基本と実例を紹介

今回は、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;

昇順時のASCの省略

ORDER BYのデフォルトの並び順は昇順です。昇順で並べ替えをするのであれば、SQL文末尾の[ASC]は省略することができます。

実際のSQL

  • テーブル名・・・・Zipcode
  • 並べ替え対象の列名・・・・city_kana

たとえば、テーブル[Zipcode]のすべての列を抽出する際、列[city_kana]を対象に昇順で並べ替えする場合には、下記のようにSQL文を記述します。

SELECT * FROM Zipcode ORDER BY city_kana ASC;

MySQLのORDER BYの実例

SELECT * FROM Zipcode ORDER BY city_kana ASC;

PostgreSQLのORDER BYの実例

SELECT * FROM Zipcode ORDER BY city_kana ASC;

複数要素の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(複数要素)の実例

SELECT * FROM Zipcode ORDER BY city_kana ASC,town_kana ASC;

PostgreSQLのORDER BY(複数要素)の実例

SELECT * FROM Zipcode ORDER BY city_kana ASC,town_kana ASC;

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組み合わせの実例

SELECT * FROM Zipcode WHERE postcode < 0101605 ORDER BY town_kana;

PostgreSQLのWHEREとORDER BY組み合わせの実例

SELECT * FROM Zipcode WHERE CAST(postcode as INTEGER) < 0101605 ORDER BY town_kana;
PostgreSQLのキャスト

当記事の趣旨とは異なりますが、PostgreSQLでは、文字列型に比較演算子を使う場合には、キャスト(明示的な型変換)が必要になります。改めて、別記事で説明します。

あとがき

今回は、RDBMSからSQLでデータを抽出する際に、並べ替えをするためのORDER BY区について記事にしました。

基本的な文法から、頻出するWHERE区との組み合わせについても実例を用いて説明しましたので、ご理解いただけたのではないでしょうか。

SQLでは、このように4大命令語と様々な修飾語を組み合わせることで、用途に応じたデータを使いやすい状態で抽出することができるようになります。

Analytics沖縄

データサイエンス・機械学習・ディープラーニングを本格的に研究するフリーランスエンジニア。 「Google データアナリティクス プロフェッショナル」の認定証を取得済み。 この分野は専門知識がなければ理解し辛い情報が多いのですが、当サイトでは初学者も意識して発信していきますので、ご関心があればぜひご覧ください。

Recent Posts

MySQLの日付型や時刻型で使う関数のフォーマット指定子

今回は、MySQLの日付型や時…

3か月 ago

SQL│文字列を日付型に変換するTo_Date・Convert

今回は、SQLで文字列を日付型…

4か月 ago

SQL│文字列型CHAR・VARCHARの違いと使い分けを解説

今回は、SQLのデータ型のうち…

4か月 ago

SQL|通貨型MONEY・SMALLMONEYの使い所は?

今回は、SQLの通貨型MONE…

4か月 ago