【初心者向け】SQLにおけるORDER BY(データの並び替え)を分かりやすく解説
ORDER BYとは?
ORDER BY句は、SQLのSELECT文で取得したデータを並び替える際に使用します。
ORDER BYはシンプルに使うことができますが、意外に奥が深く、利用機会も多いです。
基本構文は下記の通りです。
SELECT 列名1, 列名2, ...
FROM テーブル名
ORDER BY 列名1 [ASC|DESC], 列名2 [ASC|DESC], ...;
- 列名:並び替えを行いたい列を指定します。
- ASC:昇順(ascending)で並び替えを行います。指定しない場合はASCが適用されます。
- DESC:降順(descending)で並び替えを行います。
では具体例を見てみましょう。
基本的な使い方
シンプルな並び替え
まずサンプルデータを作ります。
CREATE TABLE users(name varchar(100), age integer);
INSERT INTO users(name, age) values("田中 一郎", 30);
INSERT INTO users(name, age) values("田中 二郎", 25);
INSERT INTO users(name, age) values("田中 三郎", 15);
INSERT INTO users(name, age) values("田中 四郎", 15);
このテーブルに対して名前と年齢を取得し、年齢の昇順で並び替えるには、以下のクエリを実行します。
SELECT name, age
FROM users
ORDER BY age ASC;
このクエリを実行すると、
name age
田中 三郎 15
田中 四郎 15
田中 二郎 25
田中 一郎 30
が返却され、年齢の若い順に取得できたことがわかります。
また年齢の降順で並び替えるには、以下のクエリを実行します。
SELECT name, age
FROM users
ORDER BY age DESC;
このクエリを実行すると、
name age
田中 一郎 30
田中 二郎 25
田中 三郎 15
田中 四郎 15
が返却され、年齢の高い順に取得できたことがわかります。
複数列による並び替え
ORDER BY句では、複数の列を指定して並び替えることも可能です。
その場合、最初の列で並び替えられ、同じ値を持つ行は2番目の列で並び替えられるといった具合に、指定した順序で並び替えが行われます。
次のクエリは、名前と年齢を取得し、年齢の昇順で並び替えて、同じ年齢だった場合は、名前の降順で並び替えるクエリです。
SELECT name, age
FROM users
ORDER BY age ASC, name DESC;
このクエリを実行すると、
name age
田中 四郎 15
田中 三郎 15
田中 二郎 25
田中 一郎 30
が返却され、年齢の若い順に並び替えた後、名前の降順に並び替えを行っていることがわかります。
応用的な使い方
LIMITとの組み合わせ
ORDER BY句は、LIMIT句と組み合わせて使用することがあります。
例えば、年齢が高い順に上位2人のユーザーを取得したい場合、下記のようなクエリを実行することで取得することができます。
SELECT name, age
FROM users
ORDER BY age DESC
LIMIT 2
;
また当然WHERE句を使うこともできるので、「30歳以上のユーザのうち、上位2人を取得する」といったことも、下記のようなクエリを実行することで取得することができます。
SELECT name, age
FROM users
WHERE age >= 30
ORDER BY age DESC
LIMIT 2;
最後に・・
いかがでしたでしょうか?
ORDER BY句は非常にシンプルでわかりやすいですが、利用機会も多いです。
誤った使い方をしないように、この記事を参考に実践していきましょう。