SQL の読み書き
Reading and Writing SQL
第4章 2節で、SQL(関係データベースのデータを、探したり変えたりするための言語)の例を1つ見ました。ここでは、SELECT 文を読み、書く練習をします。
ITパスポート試験のシラバス Ver.6.5 は、データ操作の項目に「SQLの文法は問わない」と書いています(小分類56。確認日:2026-10-10)。このページは、データベースの考え方をつかむための練習です。試験の準備のためのものではありません。
練習で使う表
二つの表を使います。数字は、教材用の仮例です。商品表の「商品番号」が主キー、売上表の「商品番号」が参照項目です。
商品表
| 商品番号 | 商品名 | 値段(円) |
|---|---|---|
| P01 | チキンカレー弁当 | 650 |
| P02 | 野菜カレー弁当 | 700 |
| P03 | スパイスセット | 900 |
売上表
| 売上番号 | 日付 | 商品番号 | 個数 |
|---|---|---|---|
| S001 | 10月12日 | P01 | 12 |
| S002 | 10月12日 | P02 | 9 |
| S003 | 10月13日 | P01 | 15 |
| S004 | 10月13日 | P03 | 4 |
| S005 | 10月14日 | P02 | 11 |
| S006 | 10月14日 | P01 | 10 |
| S007 | 10月15日 | P03 | 6 |
| S008 | 10月15日 | P02 | 8 |
SELECT 文の形
SELECT 取り出す列 FROM 表の名前 WHERE 条件;
- SELECT:どの列を取り出すか。列を並べるときは「,」で区切ります。
- FROM:どの表から取り出すか。
- WHERE:どの行だけを取り出すか。文字は ' ' で囲みます。条件を書かないと、すべての行になります。
- ORDER BY 列 DESC:大きい順に並べます。DESC を書かないと、小さい順です。
問題1 読む
次の文を実行すると、何が出ますか。表を見て、答えましょう。
(1)
SELECT 商品名
FROM 商品表;
(2)
SELECT 商品名, 値段
FROM 商品表
WHERE 値段 >= 700;
(3)
SELECT 売上番号, 個数
FROM 売上表
WHERE 商品番号 = 'P01';
(4)
SELECT SUM(個数)
FROM 売上表
WHERE 商品番号 = 'P02';
(5)
SELECT COUNT(*)
FROM 売上表
WHERE 日付 = '10月13日';
問題2 書く
次のことをする SELECT 文を書きましょう。
- 売上表から、10月14日の売上の、売上番号と個数を取り出す。
- 商品表から、商品名と値段を、値段が高い順に取り出す。
- 売上表から、10月15日の個数の合計を出す。
問題3 発展 二つの表をつなぐ
売上表には、商品名がありません。商品番号が同じ行を、商品表からつなげると、商品名もいっしょに見られます。次の文は、10月12日の売上を、商品名つきで取り出します。何が出ますか。
SELECT 売上表.売上番号, 商品表.商品名, 売上表.個数
FROM 売上表
JOIN 商品表 ON 売上表.商品番号 = 商品表.商品番号
WHERE 売上表.日付 = '10月12日';
答え
実際に sqlite3(SQL を動かすソフトウェア)で動かして、確かめました。
(1) 商品表のすべての行の、商品名を取り出します。
| 商品名 |
|---|
| チキンカレー弁当 |
| 野菜カレー弁当 |
| スパイスセット |
(2) 値段が700円以上の行だけを取り出します。(>= は「以上」です)
| 商品名 | 値段 |
|---|---|
| 野菜カレー弁当 | 700 |
| スパイスセット | 900 |
(3) 商品番号がP01の売上の、売上番号と個数を取り出します。
| 売上番号 | 個数 |
|---|---|
| S001 | 12 |
| S003 | 15 |
| S006 | 10 |
(4) 商品番号がP02の売上の、個数を全部足します。(SUM は「合計」です)
答え:28
(5) 10月13日の売上の行が、何行あるかを数えます。(COUNT は「数える」です)
答え:2
問題2
SELECT 売上番号, 個数 FROM 売上表 WHERE 日付 = '10月14日';→ S005(11個)、S006(10個)SELECT 商品名, 値段 FROM 商品表 ORDER BY 値段 DESC;→ スパイスセット(900円)、野菜カレー弁当(700円)、チキンカレー弁当(650円)SELECT SUM(個数) FROM 売上表 WHERE 日付 = '10月15日';→ 14個(6+8=14)
書き方が少しちがっても、同じ結果になれば正解です。たとえば、1. は SELECT の列の順を変えても、取り出すものは同じです。
問題3 発展
| 売上番号 | 商品名 | 個数 |
|---|---|---|
| S001 | チキンカレー弁当 | 12 |
| S002 | 野菜カレー弁当 | 9 |
JOIN ... ON は、二つの表を、商品番号が同じ行どうしでつなぎます。主キーと参照項目があるので、つなぐことができます。