こんにちは、ECF Techブログ
担当のMichiharu.Tです。
本記事はSQL文について、実際に動作させながら学習する入門記事の第7回となります。
今回はデータを並び替えるORDER BY句についてです。SELECT文で学習する最後の句となります。使用法は比較的シンプルです。それでは早速見ていきましょう。
本記事の題材となっているデータベース内の各表、および学習の始め方については、下記の第1回の記事からご覧ください。
ORDER BY句
ここまで様々なSELECT文の書き方を見てきました。その多くの実行結果は主に主キーの昇順(小さい順)に並んでいることが多かったと思いますが、実は SELECT文は表示結果の並び順を保証していません。特定の列に基づいて並び替えを行なうには、ORDER BY句の記述が必要です。
ORDER BY句の文例は次のようになります。
ORDER BY 列1 ASC, 列2 DESC....
- 列と並び順を指定します。列の並び順は、 昇順(ASC) または 降順(DESC) を選択できます。
- カンマ区切りで複数の列を指定できます。たとえば上の文例の場合、列1に重複する値が複数あったら、更にその範囲を列2の指定順に並べます。
- ASCやDESCは 省略可能 です。省略した場合は 昇順(ASC) と見なされます。
それでは文例を見てみましょう。
実行例1
ユーザー表(users)を年齢の昇順に並べて表示します。
SELECT * FROM users ORDER BY age DESC ;
実行結果
uid name age --- --------- --- 4 Ichiro.K 44 1 Hiroshi.T 35 5 Hitomi.S 33 2 Yoko.M 28 3 Naoto.H 26 6 Akira.O 25
実行例2
商品表(items)を分類ID(cid)の降順、さらに分類ID(cid)ごとに価格(price)の昇順に並べて表示します。
SELECT * FROM items ORDER BY cid DESC, price ;
実行結果
iid name price cid --- -------------- ------ --- 10 LAN Card 3000 3 9 Mother Board 25000 3 8 USB Cable 300 2 7 LAN Cable 500 2 6 USB Memory 800 2 4 Mouse 1000 2 5 Keyboard 1200 2 3 Tablet PC 50000 1 2 Note PC 85000 1 1 Desktop PC 100000 1 11 Inkjet Printer 9000
実行例2では、次のような並び替えが実現しています。
練習問題
それではここから練習問題です。
問1
注文表(orders)を注文日(odate)の降順に並べ、実行結果のように表示してください。
実行結果
oid uid odate --- --- ---------- 10 6 2021-05-20 5 2 2021-05-15 4 2 2021-05-10 9 6 2021-05-10 3 2 2021-05-01 8 4 2021-05-01 7 4 2021-04-30 2 1 2021-04-15 1 1 2021-04-10 6 3 2021-04-10
問2
注文明細表(orders)を商品ID(iid)の昇順に並べ、商品IDが同じものについては更に注文数量(amount)の降順に並べてください。また、商品表(items)と結合し、商品名(name)も含め、実行結果のように表示してください。
実行結果
iid name amount --- ------------ ------ 1 Desktop PC 1 1 Desktop PC 1 2 Note PC 10 2 Note PC 2 4 Mouse 10 4 Mouse 10 4 Mouse 1 4 Mouse 1 5 Keyboard 10 5 Keyboard 1 6 USB Memory 2 6 USB Memory 1 7 LAN Cable 10 8 USB Cable 5 9 Mother Board 1 9 Mother Board 1 10 LAN Card 1
練習問題(解答例)
それでは、練習問題の解答例です。
問1
SELECT * FROM orders ORDER BY odate DESC ;
問2
SELECT i.iid, i.name, od.amount FROM order_details od JOIN items i ON od.iid = i.iid ORDER BY od.iid, od.amount DESC ;
おわりに
本日は以上とさせていただきます。ORDER BY句は比較的シンプルで今日は内容が短めになりましたが、最後までご覧くださりありがとうございます。本連載におけるSELECT文については、一旦これですべてとなります。SELECT文には他にも副問合せなどの様々な技法がありますが、これらについてはまた別の連載で触れていきたいと思います。次回はデータの追加、更新、削除を行うための各文をご紹介したいと思います。引き続き、よろしくお願いいたします。
合同会社イー・シー・エフでは、子ども向けプログラミングなどの教育講座を実施しています。プログラミング教室の案内や教育教材の情報、また関連するご相談・問い合わせにつきましては下記よりご確認ください。