ITパスポート対策

SQLを読む

ITパスポートでSQLを書かされることはありません。出されたSELECT文を読んで、結果が何行になるか、どの値が返るかを答えられれば十分です。1つの表を使って、最後まで同じ表で追いかけます。

材料になる表

商品表です。

商品ID商品名分類単価在庫数
S001ボールペン文具10080
S002ノート文具20050
S003マウス電子180012
S004キーボード電子45008
S005付箋文具150200

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 単価 DESC

DESCが降順、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(単価)
文具3150
電子23150

在庫数の合計なら、文具が80と50と200で330、電子が12と8で20です。

GROUP BYの問題で狙われるのは結果の行数です。もとの表が5行でも、グループが2つなら結果は2行になります。「5行返る」という選択肢につられないでください。もう1つ、WHEREとGROUP BYが同時に出たときは、先にWHEREで行を絞り、残った行だけをグループ化します。順番を逆に考えると数が合わなくなります。

生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア
編集 LuaGate編集部