【SQL超入門講座】05.ORDER BY|データの並び替え

SQL05
SQL超入門講座

こんにちは。キノコードです。
このレッスンではSQLの並び替えについて説明します。
SQLでの並び替えは、orderbyを使った並び替えをします。
orderbyもwhereと同様に、SELECT文に付けることで、並び替えをしてデータ抽出することができます。
また、whereと組み合わせて使うこともできます。
PythonのライブラリPandas入門講座をみていただいている方は、orderbyは、Pandas入門講座レッスン8で紹介したsort_valuesメソッドと同じ働きだと考えてもらってよいです。
Pandasのorderbyはメソッドをやったことある方は、SQLのorderbyがすぐに頭に入ってくると思いますし、反対にSQLのorderbyを理解できればPandasのorderbyはメソッドもすぐにわかると思います。
SQLのレッスンでは、Pandasの対応についても紹介していきます。
データ加工が得意のPythonのPandasを学習したことのない方はぜひ、そちらも学んでみてください。

この記事の執筆・監修

キノコード
キノコード

テクノロジーアンドデザインカンパニー合同会社のCEO。
日本最大級のプログラミング教育のYouTubeチャンネル「キノコード」や、プログラミング学習サービス「キノクエスト」を運営。
著書「あなたの仕事が一瞬で片付くPythonによる自動化仕事術」や、雑誌「日経ソフトウエア」や「シェルスクリプトマガジン」への寄稿など実績多数。

ORDER BYとは


ORDER BYは、先ほども説明したように、抽出対象のデータの並び替えをするために使用します。
SELECT文にORDER BYを付けることで、取得するデータを昇順、降順に並び替えできます。
取得したいデータを並び替えする場合はORDER BYを使う、と覚えておきましょう。

ORDER BYの使い方


実際にSELECT文にORDER BYを追加し、並び替えした状態のデータを取得してみましょう。
ORDER BYを追加したSELECT文の構文は以下の通りです。

SELECT カラム名 
FROM テーブル名 
ORDER BY 並び替え条件


並び替え条件にはカラム名やカラムの番号などが入ります。
カラムの番号とは、取得したい対象のカラムを1から連番で見たときの数値になります。
また、ORDERとBYの間に半角スペースが必要なことに注意してください。
では具体例を見てみましょう。
前回も使用したtest_tableのテーブルを使います。

SELECT * 
FROM test_table
ORDER BY 売上金額 ASC


売上金額の昇順に並べてデータを取得してみましょう。
ORDER BYの後に売上金額を指定することで、売上金額を軸に並び替えすることができます。
ASCは昇順という意味です。
なのでこのSQLは「test_tableテーブルから全てのカラムを売上金額の昇順で取得する」という意味になります。

SELECT * 
FROM TEST_TABLE 
ORDER BY 売上金額 DESC


次に降順でデータを取得する方法を見ていきましょう。
降順でデータを取得したい場合はASCをDESCに変えてあげるだけです。
このSQLを実行すると、以下の通り降順でデータを取得できます。
実行します。

SELECT * 
FROM TEST_TABLE 
ORDER BY 売上金額 

今まで明示的にASC、DESCを指定しましたが、ASCに関しては、ORDER BYのデフォルトが昇順なので省略しても問題ありません。
試しに、実行してみましょう。
昇順で並び替えができました。
SQLに慣れてきたら、基本的に並び替えはDESCだけ書けばよいでしょう。

SELECT * 
FROM TEST_TABLE 
ORDER BY 商品名


数値の並び替えはイメージがつきやすいですが、今度は文字列を並び替えした場合にどうなるかを見ていきましょう。
売上金額の代わりに商品名で並び替えします。
文字列でも並び替えができました。
文字列でも並び替えができていることがが分かります。
1文字目が同じ場合は2文字目以降で並び替え順を判断しています。

複数のカラムで並び替えする


SELECT * 
FROM TEST_TABLE 
ORDER BY 売上金額 , 売上日


並び替えは1つのカラムだけでなく、複数のカラムを指定して並び替えすることも可能です。
ここで「売上金額で並べ、さらに売上日で昇順に並べたい」という場合は、ORDER BYの並び替え条件にそれぞれのカラム名をカンマ区切りで指定します。
次のSQLを実行します。
売上金額が小さい中から、さらにその中から日付が小さい順に並んでいます。

SELECT * 
FROM TEST_TABLE 
ORDER BY 売上日 , 売上金額


order byで複数のカラム名を指定した場合、優先的に並び替えされるのは先に指定したカラムになるという点は覚えておきましょう。
売上日の順に、売上金額で並び替えてみましょう。
並び替えができました。
売上日が小さい順に、売上金額が小さいものの順番で並んでいます。

SELECT * 
FROM TEST_TABLE 
ORDER BY 売上金額 DESC,売上日 ASC

2つ以上のカラムで並び替えをする場合、どちらも昇順になっていました。
どちらか一方を降順にすることもできます。
また、降順にしたいもののカラムにDESCを付けることで降順にすることも可能です。
売上金額が降順に、売上日を昇順にして並び替えをしてみましょう。
期待通りのデータを取得できました。

SQLでの並び替えは、対象カラムは2つだけではなく、3つ4つといくつでも指定できます。
カンマで区切って記述していけばよいです。

SELECT * 
FROM TEST_TABLE 
WHERE 売上金額 <= 10000
ORDER BY 売上金額 DESC,売上日 ASC


最後に、前回のレッスンでお教えしたWHEREとの組み合わせでORDER BYを使ってみましょう
WHEREはFROMのあとに記述します。
したがって、ORDER BYは、FROMとWHEREのあとに書きます。
ORDER BYは最後に書くと覚えておきましょう。
それでは、実行します。
データ抽出ができました。

以上が基本的なORDER BYの使い方です。