SQL入門 STEP5|ORDER BYで並び替えよう

karin@taishi@felmia

取得したデータを並び替えてみよう

STEP4では、WHEREを使って条件に合ったデータだけを取得しました。

例えば、5000円以上の商品を探すなら次のように書きました。

SELECT * FROM products
WHERE price >= 5000;

これで必要な商品を絞り込むことはできます。

では、

「価格が安い商品から順番に見たい」

という場合はどうすればいいでしょうか。

こんなときに使うのがORDER BYです。

ORDER BYとは?

SELECTで取得したデータの並び順を指定するときに使います。

例えば、

  • 価格が安い順
  • 価格が高い順
  • 商品IDが小さい順

といった並び替えができます。

ルミィ
ルミィ

欲しいデータを取ってくるだけじゃなくて、見やすい順番にもできるんだね♪

価格が安い順に並べてみよう

まずは、商品を価格の安い順に並べてみます。

Query Toolで次のSQLを実行してください。

SELECT * FROM products
ORDER BY price ASC;

実行すると、価格の小さい商品から順番に表示されます。

product_id | product_name | price
-----------+--------------+-------
5          | USBメモリ     | 2000
2          | マウス        | 3000
3          | キーボード     | 8000
4          | モニター       | 30000
1          | ノートPC       | 120000

2000円のUSBメモリから始まり、一番高い120000円のノートPCが最後になりました。

今回追加したのは、

ORDER BY price ASC

です。

ORDER BYの後ろには、並び替えに使いたいカラムを指定します。

今回はpriceを指定しているので、価格を基準に並び替えています。

ASCは小さいものから並べる

先ほどのSQLでは、priceの後ろにASCを書きました。

ORDER BY price ASC

ASCは昇順を表します。

数値なら、小さい値から大きい値へ並びます。

2000
3000
8000
30000
120000

数字がだんだん大きくなっていますね。

ASC(昇順)

小さい値から大きい値へ並べます。

1 → 2 → 3 → 4 → 5

価格なら、安い商品から高い商品へ並べるときに使えます。

価格が高い順に並べてみよう

今度は反対に、価格が高い商品から並べてみます。

この場合はDESCを使います。

SELECT * FROM products
ORDER BY price DESC;

実行結果は次のようになります。

product_id | product_name | price
-----------+--------------+-------
1          | ノートPC       | 120000
4          | モニター       | 30000
3          | キーボード     | 8000
2          | マウス         | 3000
5          | USBメモリ      | 2000

今度は120000円のノートPCから始まり、2000円のUSBメモリが最後になりました。

DESCは降順を表します。

ASCとDESC

ASC:昇順
→ 小さい値から大きい値

DESC:降順
→ 大きい値から小さい値

価格なら、

ASC → 安い順

DESC → 高い順

と考えると分かりやすいです。

ルミィ
ルミィ

ASCとDESCは最初は迷っても大丈夫!
使いながら覚えていこう♪

ASCは省略できる

実は、昇順のASCは省略できます。

次の2つのSQLは同じ並び順になります。

SELECT * FROM products
ORDER BY price ASC;
SELECT * FROM products
ORDER BY price;

ASCもDESCも指定しなかった場合は、昇順で並び替えられます。

そのため、

ORDER BY price

だけでも価格の安い順になります。

ただ、SQLを読み返したときに並び順が分かりやすいので、この講座では基本的にASCまで書いていきます。

商品IDでも並び替えられる

ORDER BYで指定できるのは価格だけではありません。

商品IDで並び替えてみましょう。

SELECT * FROM products
ORDER BY product_id DESC;

今回はproduct_idを降順にしているので、

5
4
3
2
1

の順番で商品が表示されます。

このように、

ORDER BY カラム名 ASC

または、

ORDER BY カラム名 DESC

と書くことで、並び替えに使うカラムを変更できます。

WHEREとORDER BYを一緒に使ってみよう

WHEREとORDER BYを組み合わせることもできます。

例えば、

「5000円以上の商品だけを、価格が安い順に表示したい」

とします。

SELECT * FROM products
WHERE price >= 5000
ORDER BY price ASC;

実行すると、

product_id | product_name | price
-----------+--------------+-------
3          | キーボード     | 8000
4          | モニター       | 30000
1          | ノートPC       | 120000

となります。

まずWHEREの条件に合う商品が対象になり、その結果がORDER BYで並び替えられています。

ここで、SQLを書く順番にも注目してみましょう。

SELECT ...
FROM ...
WHERE ...
ORDER BY ...

WHEREを使う場合は、WHEREを書いた後にORDER BYを書きます。

順番を逆にしないようにしましょう。

ルミィ
ルミィ

WHEREで商品を絞ってから、ORDER BYで見やすく並べられるんだね!

複数のカラムを使って並び替えてみよう

ORDER BYには、複数のカラムを指定することもできます。

ただ、今のproductsでは商品の価格がすべて違うので、少し分かりにくいですね。

例えば、次のような商品が入っていたとします。

product_id | product_name | price
-----------+--------------+------
2          | マウス        | 3000
6          | ケーブル      | 3000
7          | マウスパッド   | 3000

同じ3000円の商品が3つあります。

ここで、

ORDER BY price ASC, product_id ASC

とすると、

まずpriceで並び替え、priceが同じ場合はproduct_idで並び替える

という指定ができます。

SQL全体では次のようになります。

SELECT * FROM products
ORDER BY price ASC, product_id ASC;

今の練習用データでは価格が重複していないので、結果に大きな違いはありません。

今後、同じ値を持つデータが増えてきたときに使える書き方です。

ORDER BYに複数のカラムを書くと?

左側に書いたカラムから順番に並び替えます。

ORDER BY price ASC, product_id ASC

なら、

  1. priceで並び替える
  2. priceが同じデータはproduct_idで並び替える

という順番です。

SELECTにないカラムでも並び替えられる

STEP4では、SELECTで表示するカラムとWHEREで条件に使うカラムは別でもよいことを確認しました。

ORDER BYも同じです。

例えば、

SELECT product_name FROM products
ORDER BY price DESC;

と書くことができます。

表示するのはproduct_nameだけですが、並び替えにはpriceを使っています。

そのため、商品名が価格の高い商品から順番に表示されます。

product_name
------------
ノートPC
モニター
キーボード
マウス
USBメモリ

結果に価格は表示されませんが、内部ではpriceを使って並び替えています。

よくある間違い

ASCとDESCを逆にしてしまう

最初のうちは、どちらが昇順だったか分からなくなることがあります。

ASC  → 小さい値から大きい値
DESC → 大きい値から小さい値

迷ったら確認しながら使えば問題ありません。

WHEREとORDER BYの順番を逆にする

WHEREと一緒に使う場合は、

SELECT * FROM products
WHERE price >= 5000
ORDER BY price ASC;

の順番です。

WHERE → ORDER BY

と書きます。

並び替えるカラム名を間違える

例えば、今回のテーブルにproduct_priceというカラムはありません。

ORDER BY product_price ASC

と書くとエラーになります。

カラム名が分からなくなったときは、STEP2で作ったproductsテーブルの構造を確認してみましょう。

STEP5のまとめ

STEP5のポイント

  • ORDER BYを使うと取得結果を並び替えられる
  • ASCは昇順
  • DESCは降順
  • ASCは省略できる
  • ORDER BYには並び替えに使うカラムを指定する
  • WHEREと組み合わせる場合はWHERE → ORDER BYの順番で書く
  • 複数のカラムを使った並び替えもできる

今回はORDER BYを使って、取得した商品を好きな順番に並び替えました。

WHEREと組み合わせれば、

「条件に合う商品を探して、さらに見やすい順番に並べる」

ところまでできるようになります。

SELECT、WHERE、ORDER BYはこれからも何度も使います。

書き方を丸暗記するより、実際にSQLを書きながら少しずつ慣れていきましょう。

ルミィ
ルミィ

STEP5クリア!
欲しいデータを探して、好きな順番に並べられるようになったね♪

次のSTEPへ

ここまで使ってきたproductsの商品データは、STEP3で練習用としてまとめて登録しました。

次は、そのとき詳しく説明しなかったINSERTを使います。

新しい商品を自分でテーブルへ追加しながら、

「どのテーブルの、どのカラムに、どんな値を登録するのか」

を確認していきましょう。

→ STEP6「INSERTでデータを追加しよう」

学習内容を確認したいときは、SQL入門の一覧から各STEPを確認できます。

→ SQL入門|初心者が基礎から学べるSQL学習ガイド

記事URLをコピーしました