SQLiteでデータベース(SQL)の基本を学ぶ(7)

データベース

こんにちは、ECF Techブログ
担当のMichiharu.Tです。

本記事はSQL文について、実際に動作させながら学習する入門記事の第7回となります。
今回はデータを並び替えるORDER BY句についてです。SELECT文で学習する最後の句となります。使用法は比較的シンプルです。それでは早速見ていきましょう。

本記事の題材となっているデータベース内の各表、および学習の始め方については、下記の第1回の記事からご覧ください。

データベース
データベースのカテゴリです。トレーニングとして使えるSQLの入門記事などを連載しています。

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文には他にも副問合せなどの様々な技法がありますが、これらについてはまた別の連載で触れていきたいと思います。次回はデータの追加、更新、削除を行うための各文をご紹介したいと思います。引き続き、よろしくお願いいたします。


合同会社イー・シー・エフでは、子ども向けプログラミングなどの教育講座を実施しています。プログラミング教室の案内や教育教材の情報、また関連するご相談・問い合わせにつきましては下記よりご確認ください。

ECFエデュケーション
タイトルとURLをコピーしました