検索結果を昇順や降順に並べ替えたい。
ORDER BY句ってどうやって使うの?
わかりやすく教えて欲しい。
こういった疑問にこたえます。
エンジニアの僕がわかりやすく解説します。
ORDER BYの使い方
一般にテーブルからデータを選択する場合、その順番は特に指定がない限りどんな順番で並ぶか全くわかりません。
同じSELECT文であっても実行するたびに並び順が変わる可能性があります。
結果を順番に並べたい場合は、SELECT文の文末にORDER BY句を書くことで明示的に行の順番を指定することができます。
ORDER BY句の構文は次の通りです。
SELECT <列名1>, <列名2>,・・・
FROM <テーブル名>
ORDER BY <並べ替えの基準となる列1>, <並べ替えの基準となる列2>,・・・;
例えば、次のようなshohinテーブルがあったとします。
shohin_mei | shohin_bunrui | kakaku |
鉛筆 | 事務用品 | 100 |
ボールペン | 事務用品 | 100 |
フライパン | キッチン用品 | 1000 |
鍋 | キッチン用品 | 1500 |
帽子 | 衣類 | 1500 |
Tシャツ | 衣類 | 1000 |
靴下 | 衣類 | 300 |
消しゴム | 事務用品 | 50 |
このテーブルのkakakuを昇順に並べ替えて取り出したい場合は、次のようなSQL文になります。
SELECT * FROM shohin ORDER BY kakaku ASC;
昇順と降順の指定
先ほどの例ではkakakuの昇順に取り出しました。
ASCとはascending orderの略で昇順を表します。
逆に、降順に並べ替えて取り出したい場合は列名の後ろにDESCを指定します。
DESCはdescending orderの略で降順を表します。
複数のソートキーを指定する
先ほどの例ではkakakuを昇順に並べ替えましたが、kakakuが全く同じのレコードは順番はランダムに表示されます。
この同順位のデータについても細かく並び順を指定したい場合は、もう一つソートキーを追加する必要があります。
ここでは、kakakuが同じ場合にshohin_bunruiの昇順に並べ替える例を紹介します。
ORDER BY句のkakaku ASCの後にshohin_bunruiに対してASCを指定します。
SELECT * FROM shohin ORDER BY kakaku ASC, shohin_bunrui ASC;
実行結果
shohin_mei | shohin_bunrui | kakaku |
フライパン | キッチン用品 | 1000 |
鍋 | キッチン用品 | 1500 |
消しゴム | 事務用品 | 50 |
鉛筆 | 事務用品 | 100 |
ボールペン | 事務用品 | 100 |
靴下 | 衣類 | 300 |
Tシャツ | 衣類 | 1000 |
帽子 | 衣類 | 1500 |
複数のソートキーを指定した場合は、左側から優先的に使用され、そのキーで同じ値が存在した場合に右のキーが参照されるというルールです。
ORDER BYの使い方まとめ
解説の内容をまとめます。
- 検索結果を並べ替えるにはORDER BY句を使う
- ORDER BY句の列名の後ろにASCキーワードをつけると昇順、DESCキーワードをつけると降順に並べ替える
- ORDER BY句には複数のソートキーを指定することができる
- ソートキーを複数指定した場合は左側から優先的に使用される
以上、お疲れ様でした。
コメント