次のSQL文の実行結果がA表のようになった。
aに入れるべき適切な字句はどれか。
SELECT S_CODE, S_NAME, BU_NAME
FROM BUSHO, SHAIN
WHERE a
BUSHO表
BU_CODE|BU_NAME|BU_CHO/S01|システム1部|1107/S02|システム2部|1110
SHAIN表
S_CODE|S_NAME|S_NENREI|S_SHOZOKU/1001|山本 一平|23|S01/1002|中谷 宏|25|S01/1003|鈴木 隆夫|23|S02/1004|佐藤 俊二|26|S01/1005|山崎 ひとみ|23|S02/1006|田中 五郎|25|S02/1107|山本 明|32|S01/1110|田中 和夫|30|S02
A表(実行結果)
S_CODE|S_NAME|BU_NAME/1001|山本 一平|システム1部/1003|鈴木 隆夫|システム2部/1005|山崎 ひとみ|システム2部
正答1
解説
正解は1です。
SQL文の実行結果から、WHERE句の条件を逆算する問題です。
結果のA表は、社員1001、1003、1005の3行で、それぞれ所属部署の部署名が付いています。
3人とも年齢が23歳である点が手掛かりです。
【選択肢別解説】
1:○ BU_CODE=S_SHOZOKUでBUSHO表とSHAIN表を部署で結合し、S_NENREI=23で23歳の社員に絞ります。
該当するのは1001(システム1部)、1003と1005(システム2部)の3人で、A表と一致します。
2:× 年齢を23歳から25歳までとすると、25歳の1002と1006も含まれます。
結果が5行になり、A表と一致しません。
3:× BU_CHO='1107'を加えると、部長が1107であるシステム1部の社員だけに絞られます。
結果は1001の1行だけになり、A表と一致しません。
4:× 結合条件がないため、2つの表のすべての行の組合せができます。
23歳の社員3人と2つの部署の組合せで6行になり、A表と一致しません。
【ポイント】
FROM句に複数の表を書いたら、WHERE句で結合条件を指定するのが基本です。
結合条件を忘れると、すべての組合せを作る直積になります。