SQLの基本構文の中で、データの並べ替えを行うための「ORDER BY」句は頻繁に利用されるため、プログラマーに取って必須知識の1つです。
本記事では、MySQL環境でデータの並べ替え「ORDER BY」の使い方について、サンプルSQLを交えながらご紹介していきたいと思います。
目次
MySQLでORDER BYの基本的な使い方を学ぼう
データベースのテーブルからデータを抽出する際、並び順を指定しない場合どのような順序でデータが取得されるのかプログラマーには分かりません。
ORDER BY句を使用することで、SELECT句で抽出するデータをプログラマーが指定したカラムを条件に「昇順」「降順」で並び替えることが可能となります。
ORDER BY句の基本構文を確認しよう
まずORDER BYを使用した基本構文は下記の通りとなります。
SELECT カラム名, ... FROM テーブル名 ORDER BY カラム名, ...;
ORDER BYの後ろに指定したカラム名を昇順で並び替えます。
ORDER BY句でデータを降順に並び替える
ORDER BYではカラム名だけを記述した場合、「ASK(昇順)」がデフォルト設定となっています。
DESC(降順)を指定したい場合には下記のように記述します。
SELECT カラム名, ... FROM テーブル名 ORDER BY カラム名 DESC, ...;
MySQLでORDER BY句を確認するためのサンプルデータ
実際にMySQLでORDER BY句を利用してみる前にサンプルSQLで利用するサンプルデータをご紹介しておきます。
Userテーブルを作成する
今回はサンプルテーブルとして「User」テーブルを作成します。
create table user (id int, user_name varchar(20), age int, height double);
テーブルが作成出来たらテスト用のデータを追加してみましょう。
insert into user values(1, "ポテパン1", 23, 182.5); insert into user values(2, "ポテパン2", 18, 165.3); insert into user values(3, "ポテパン3", 23, 170.1); insert into user values(4, "ポテパン4", 27, 169.7);
作成したデータは下記のようになります。
+------+---------------+------+--------+ | id | user_name | age | height | +------+---------------+------+--------+ | 1 | ポテパン1 | 23 | 182.5 | | 2 | ポテパン2 | 18 | 165.3 | | 3 | ポテパン3 | 23 | 170.1 | | 4 | ポテパン4 | 27 | 169.7 | +------+---------------+------+--------+
MySQL環境で実際のテーブルデータからORDER BYの使い方を理解しよう
テーブルの準備が出来たところで、実際にテーブルからデータを取得してORDER BYで並び替えるサンプルSQLをご紹介していきたいと思います。
ORDER BY句の基本を理解しよう
まずは年齢の昇順で並べ替えるサンプルSQLを確認してみましょう。
select * from user order by age;
実行結果は下記の通りとなり、「age」の昇順で並び替えられていることをご確認頂けます。
+------+---------------+------+--------+ | id | user_name | age | height | +------+---------------+------+--------+ | 2 | ポテパン2 | 18 | 165.3 | | 1 | ポテパン1 | 23 | 182.5 | | 3 | ポテパン3 | 23 | 170.1 | | 4 | ポテパン4 | 27 | 169.7 | +------+---------------+------+--------+
ORDER BY句に2つのカラムを指定してみよう
次に「age(年齢)」が同じデータが2つ以上存在する場合、2番目の条件として「height(身長)」の昇順で並び替えるサンプルSQLを実行してみましょう。
select * from user order by age, height;
実行した結果、下記の通り「height(身長)」の昇順で並び替えられています。
+------+---------------+------+--------+ | id | user_name | age | height | +------+---------------+------+--------+ | 2 | ポテパン2 | 18 | 165.3 | | 3 | ポテパン3 | 23 | 170.1 | | 1 | ポテパン1 | 23 | 182.5 | | 4 | ポテパン4 | 27 | 169.7 | +------+---------------+------+--------+
ORDER BY句で昇順のカラムと降順のカラムを両方設定してみよう
最後にORDER BY句に昇順のカラムと降順のカラム両方を指定したサンプルSQLをご紹介します。
基本の構文は変わらず、先に指定したカラムの並び替え条件から適用されていきます。
select * from user order by age desc, height;
実行した結果が下記の通りとなります。
+------+---------------+------+--------+ | id | user_name | age | height | +------+---------------+------+--------+ | 4 | ポテパン4 | 27 | 169.7 | | 3 | ポテパン3 | 23 | 170.1 | | 1 | ポテパン1 | 23 | 182.5 | | 2 | ポテパン2 | 18 | 165.3 | +------+---------------+------+--------+
「age(年齢)」を降順で並び替えた後、「height(身長)」を昇順で並び替えていることがサンプルデータからご確認頂けます。
さいごに:MySQLでORDER BYの使い方を理解して狙った順番でデータを取得しよう
本記事では、MySQL環境でのORDER BY句の使い方についてサンプルSQLを交えながらご紹介してきました。
ORDER BY句の基本的な記述方法はMySQL以外のデータベースでも同じですので、ORACLEなどMySQL以外のデータベースを利用する際にもご利用頂けます。
ORDER BYは利用機会も多いため、しっかりと挙動を把握し狙い通りにデータ抽出が出来るよう、きちんと使い方を把握しておきましょう。
ORDER BY句では先に指定したカラムから順に並び替えを行い、値が同じ場合には2番目以降に指定したカラムで並び替えが行われることを意識しておきましょう。