“社員”表と“部門”表に対して,次のSQL文を実行したときの結果はどれか。
SELECT COUNT(*) FROM 社員, 部門
WHERE 社員.所属 = 部門.部門名 AND 部門.フロア = 2
社員
社員番号|所属/11001|総務/11002|経理/11003|営業/11004|営業/11005|情報システム/11006|営業/11007|企画/12001|営業/12002|情報システム
部門
部門名|フロア/企画|1/総務|1/情報システム|2/営業|3/経理|2/法務|2/購買|2
正答3
解説
正解は3です。
このSQL文は、社員表と部門表を「社員.所属=部門.部門名」で結合し、フロアが2の行の数を数えます。
フロア2の部門に所属する社員の人数を求めればよいことになります。
【計算】
部門表でフロアが2の部門は、情報システム、経理、法務、購買の四つです。
所属が経理の社員は、11002の1人です。
所属が情報システムの社員は、11005と12002の2人です。
所属が法務と購買の社員はいません。
合計は、1+2=3人です。
【選択肢別解説】
1:× 1は経理の社員だけを数えた値で、情報システムの2人が漏れています。
2:× 2は情報システムの社員だけを数えた値で、経理の1人が漏れています。
3:○ 経理1人と情報システム2人で、COUNT(*)の結果は3です。
4:× 4はフロア2の部門の数であり、社員の人数ではありません。
【ポイント】
COUNT(*)は、結合と絞込みのあとに残った行の数を数えます。
社員のいない部門(法務、購買)は結合で行が作られないので、数に入りません。