ITパスポート対策
SQLを読む
ITパスポートでSQLを書かされることはありません。出されたSELECT文を読んで、結果が何行になるか、どの値が返るかを答えられれば十分です。1つの表を使って、最後まで同じ表で追いかけます。
材料になる表
商品表です。
| 商品ID | 商品名 | 分類 | 単価 | 在庫数 |
|---|---|---|---|---|
| S001 | ボールペン | 文具 | 100 | 80 |
| S002 | ノート | 文具 | 200 | 50 |
| S003 | マウス | 電子 | 1800 | 12 |
| S004 | キーボード | 電子 | 4500 | 8 |
| S005 | 付箋 | 文具 | 150 | 200 |
SELECT・FROM・WHERE
基本の形は次の3つです。SELECTで欲しい列、FROMで対象の表、WHEREで行の条件を指定します。
SELECT 商品名, 単価 FROM 商品 WHERE 分類 = '文具'WHEREで文具の3行に絞り、SELECTで2列だけ取り出します。結果はボールペン100、ノート200、付箋150の3行です。関係演算でいえば、WHEREが選択、SELECTが射影にあたります。
条件を重ねるときはANDとORを使います。
SELECT 商品名 FROM 商品 WHERE 分類 = '文具' AND 単価 >= 150文具の3行のうち、単価が150以上なのはノート200と付箋150です。以上なので150ちょうどの付箋は入ります。結果は2行です。この「以上と超過」の取り違えは本試験でも仕込まれます。大なりイコールなら境界の値を含む、と読むたびに確かめてください。
ORにすると結果が増えます。
SELECT 商品名 FROM 商品 WHERE 分類 = '電子' OR 在庫数 <= 50電子はマウスとキーボード。在庫数が50以下はノート50、マウス12、キーボード8。どちらかを満たせばよいので、重複を除いてノート・マウス・キーボードの3行です。ANDのつもりで読むと2行と答えてしまうので、接続詞は指でなぞるくらい慎重に読みます。
ORDER BYで並べ替える
SELECT 商品名, 単価 FROM 商品 ORDER BY 単価 DESCDESCが降順、ASCが昇順で、省略すると昇順です。結果はキーボード4500、マウス1800、ノート200、付箋150、ボールペン100の順になります。並べ替えても行数は変わりません。「ORDER BYで行が絞られる」と勘違いさせる選択肢が出ることがあります。
集計関数とGROUP BY
集計関数は5つ覚えます。件数を数えるCOUNT、合計のSUM、平均のAVG、最大のMAX、最小のMINです。
SELECT COUNT(*), MAX(単価), MIN(単価) FROM 商品5行すべてが対象なので、件数は5、最大は4500、最小は100です。
GROUP BYを付けると、指定した列の値ごとにグループを作り、グループ単位で集計します。
SELECT 分類, COUNT(*), AVG(単価) FROM 商品 GROUP BY 分類分類は文具と電子の2種類なので、結果は2行になります。文具は3件で平均が100と200と150の平均で150、電子は2件で平均が1800と4500の平均で3150です。
| 分類 | COUNT(*) | AVG(単価) |
|---|---|---|
| 文具 | 3 | 150 |
| 電子 | 2 | 3150 |
在庫数の合計なら、文具が80と50と200で330、電子が12と8で20です。
GROUP BYの問題で狙われるのは結果の行数です。もとの表が5行でも、グループが2つなら結果は2行になります。「5行返る」という選択肢につられないでください。もう1つ、WHEREとGROUP BYが同時に出たときは、先にWHEREで行を絞り、残った行だけをグループ化します。順番を逆に考えると数が合わなくなります。