みなさんこんにちは! フリーランスプログラマーのsatoです。
今回は「ORDER BY」句について見ていきましょう。「ORDER BY」は一言で言うとソートを行う仕組みです。シンプルな機能ですね! しかしシンプルゆえに奥が深いのも事実です。
- 昇順・降順はどう設定するのか?
- 「GROUP BY」と組み合わせた時はどうなるの?
などなど疑問は尽きないものです。今回はそんな疑問についても解消していきましょう。
「ORDER BY」の使い方!
先ほども伝えた通りORDER BYはソートを行ってくれる機能です。まずはその基本的な使い方から見ていきましょう。
今回使用するテーブル
今回はシンプルなテーブルを用意しています。
userテーブル:
+------+--------------+ | id | name | +------+--------------+ | 1 | ヤマダ | | 2 | スズキ | | 3 | タナカ | | 4 | タカハシ | | 5 | ワタナベ | +------+--------------+
基本的な使い方
「ORDER BY」の基本的な使い方は以下の通りです。
SELECT [表示要素名] FROM [テーブル名] ORDER BY [ソートする要素名] [昇順・降順の指定];
もっと具体的に見てみましょうか。例えば先ほどのuserテーブルを、idの降順で表示しようとした場合は以下となります。
実行命令:
SELECT * FROM user ORDER BY id DESC;
結果:
+------+--------------+ | id | name | +------+--------------+ | 5 | ワタナベ | | 4 | タカハシ | | 3 | タナカ | | 2 | スズキ | | 1 | ヤマダ | +------+--------------+
id順の降順にソートできていますね!
昇順・昇順の指定
先ほどの[昇順・降順の指定]には以下の二種類が指定できます。
- ASC・・・昇順
- DESC・・・降順
また何も指定しなかった場合のデフォルトは昇順となります。
複数の要素でソートをする場合
「ORDER BY」の後ろのソート指定は「,」区切りで複数指定することも可能です。以下は二つ指定をしている例です。
SELECT * FROM user ORDER BY id DESC, name ASC;
もちろん「WHERE」も同時につけられる
条件を指定する「WHERE」句も同時に指定できます。同時に使用する場合の注意点としては、先にWHERE句を書く必要があることでしょうか。例えば先ほどの命令に「idが3より大きい」という条件を付け加えるなら以下のようになります。
実行命令:
SELECT id,name FROM user WHERE 3 < id ORDER BY id DESC;
結果:
+------+--------------+ | id | name | +------+--------------+ | 5 | ワタナベ | | 4 | タカハシ | +------+--------------+
「GROUP BY」と同時にも使える
グループ化を行う「GROUP BY」とも同時に使用が可能です。例えば、同一名ごとにグループ化して、その数を表示する。かつ、その数でソートをしたい場合は、以下のような書き方になるでしょう。
SELECT name,count(name) as name_num FROM game_character GROUP BY name ORDER BY name_num DESC;
文法的には先に「GROUP BY」を書く必要がある点に注意しましょう。あとは、グループ化されたあとのものに、ソートをかけることになるということにも注意が必要でしょう。
また「GROUP BY」の詳細は以下の記事にまとめてありますので、合わせて使う人はぜひ読んでみてください。
まとめ
今回は「ORDER BY」について見てきました。ソートを行うこの命令。状況によっては結構多用することになるでしょう。
例えば順位表示や、見栄えの調整などでよく使われるはずです。単体で使うことより、WHEREなどで条件をつけて使用することも多いため、今回学んだことを活用してみてください。