【MySQL】昇順や降順でソートする(order by の使い方)

データを昇順や降順でソート(並べ替え)するには「ORDER BY」句を使います。

ここでは MySQLコマンド「ORDER BY」の具体的な使い方を解説していきます。

 

「ORDER BY」の基本

「ORDER BY」は、「SELECT」などと組み合わせてデータを検索するときに使います。

 

例えば以下は「SELECT」文と組み合わせて使った場合の例。

昇順でソートする場合

SELECT * FROM テーブル名 ORDER BY カラム名;

降順でソートする場合

カラム名の後ろに DESC をつけます。

SELECT * FROM テーブル名 ORDER BY カラム名 DESC;
メモ

SELECT 文の詳しい使い方はこちら

 

データを昇順でソートする

実際にMySQLサーバーに接続し、動作を確認してみましょう。

 

あらかじめ「test」データベースの「users」テーブルに、以下のようにデータが保存されている例で進めていきます。

name age
佐藤 21
山下 47
鈴木 25
田中 21
山田 32

データを保存するコマンド例

CREATE DATABASE test;
USE test;
CREATE TABLE users (name VARCHAR(100), age INT);
INSERT INTO users (name, age) VALUES ('佐藤', 21);
INSERT INTO users (name, age) VALUES ('山下', 47);
INSERT INTO users (name, age) VALUES ('鈴木', 25);
INSERT INTO users (name, age) VALUES ('田中', 21);
INSERT INTO users (name, age) VALUES ('山田', 32);
メモ

CREATE DATABASE 文の詳しい使い方はこちら

USE 文の詳しい使い方はこちら

CREATE TABLE 文の詳しい使い方はこちら

INSERT INTO 文の詳しい使い方はこちら

 

それでは「age」カラムの値の昇順で、データをソートしてみましょう。コマンドは以下。

SELECT * FROM users ORDER BY age;

 

コマンドを実行すると、以下のように「age」カラムの数字が小さい順で表示されました。

メモ

以下のように ASC を後ろにつけると、明示的に昇順を表すことができます。デフォルトでは昇順になっているので、つけない場合が多いです。

SELECT * FROM users ORDER BY age ASC;

 

データを降順でソートする

今度は「age」カラムの値の降順で、データをソートしてみましょう。コマンドは以下。

SELECT * FROM users ORDER BY age DESC;

 

コマンドを実行すると、以下のように「age」カラムの数字が大きい順で表示されました。

 

複数のカラムを指定してソートする

カンマ(,)で区切ることで、複数のカラムを指定してソートすることもできます。

以下のようにすると、まず「age」カラムの値を使って降順でソートし、同じ値の場合は「name」カラムの値を使って昇順でソートします。

SELECT * FROM users ORDER BY age DESC, name;

 

「WHERE」と組み合わせて使う

今度は「WHERE」と組み合わせて使ってみましょう。

以下のようにすると、先頭に「山」がつくデータを検索し、「age」カラムの値を使って昇順にソートします。

SELECT * FROM users WHERE name LIKE '山%' ORDER BY age;

メモ

WHERE の詳しい使い方はこちら

LIKE の詳しい使い方はこちら

 

ここまでが「ORDER BY」の基本!

理解をさらに深めたい方は以下からの内容もご覧ください。

 

任意の順番にソートする

以下のようにFIELD関数を組み合わせることで、指定したデータの順にソートすることもできます。

ORDER BY FIELD(カラム名, データ1, データ2, ……);

 

以下は「age」カラムの値が「32」、「21」、「25」の順にデータを並べ替える例。

SELECT * FROM users ORDER BY FIELD(age, 32, 21, 25);

 

指定しなかった「47」が先頭で、残りは指定した順にソートされます。

 

ある条件に該当するデータの順にソートする

「ORDER BY」で条件を指定することで、条件に該当するデータの順にソートすることもできます。

以下のコマンドで、「age」カラムの値が「30」以上のデータが上に並びます。

SELECT * FROM users ORDER BY age >= 30 DESC;

 

大文字と小文字を区別してソートする

文字列の値をソートする場合は、通常はアルファベットの大文字と小文字を区別しません。

カラム名の手前に BINARY をつけることで、大文字と小文字を区別してソートすることができます。

 

「name」カラムの値の大文字と小文字を区別してソートするコマンド例

SELECT * FROM users ORDER BY BINARY name;

 

まとめ

以上、MySQLコマンド「ORDER BY」の使い方でした!

 

ここまでの内容をまとめておきます。

  • 「ORDER BY」でデータを昇順や降順でソート(並べ替え)することができる。
  • 昇順で並べ替えるには ASC(省略可能)、降順で並べ替えるには DESC をカラム名の後ろにつける。
  • 複数のカラムを指定することで、初めに指定した並べ替えで条件が同じ場合は、次に指定したカラムの値の順でソートすることができる。