"社員取得資格"表に対し、SQL文を実行して結果を得た。SQL文のaに入れる字句はどれか。 社員取得資格(社員コード,資格): S001,FE / S001,AP / S001,DB / S002,FE / S002,SM / S003,FE / S004,AP / S005,NULL。結果(社員コード,資格1,資格2): S001,FE,AP / S002,FE,NULL / S003,FE,NULL。 〔SQL文〕SELECT C1.社員コード, C1.資格 AS 資格1, C2.資格 AS 資格2 FROM 社員取得資格 C1 LEFT OUTER JOIN 社員取得資格 C2 [a]
外部結合の絞り込みはON句へ。WHERE句だと内部結合化する
| 社員取得資格: | 社員コード | 資格 |
|---|---|---|
| S001 | FE | |
| S001 | AP | |
| S001 | DB | |
| S002 | FE | |
| S002 | SM | |
| S003 | FE | |
| S004 | AP | |
| S005 | NULL |
| 結果: | 社員コード | 資格1 | 資格2 |
|---|---|---|---|
| S001 | FE | AP | |
| S002 | FE | NULL | |
| S003 | FE | NULL |
選択肢
- アON C1.社員コード = C2.社員コード AND C1.資格 = 'FE' AND C2.資格 = 'AP' WHERE C1.資格 = 'FE'
- イON C1.社員コード = C2.社員コード AND C1.資格 = 'FE' AND C2.資格 = 'AP' WHERE C1.資格 IS NOT NULL
- ウON C1.社員コード = C2.社員コード AND C1.資格 = 'FE' AND C2.資格 = 'AP' WHERE C2.資格 = 'AP'
- エON C1.社員コード = C2.社員コード WHERE C1.資格 = 'FE' AND C2.資格 = 'AP'
正解と解説
正解:ア ON C1.社員コード = C2.社員コード AND C1.資格 = 'FE' AND C2.資格 = 'AP' WHERE C1.資格 = 'FE'
同じ表を左外部結合し、左側にFEの行、右側に同じ社員のAPの行を対応付ける形にすればよい。結合条件をON句に書けば対応しない行も左側は残り、右側はNULLになる。そのうえでWHERE句で左側をFEの行に限定すれば、FE保有者ごとにAPの有無を並べた結果が得られる。よってアが正しい。
選択肢ごとの解説
- ア正解。ON句で結合相手を絞りつつ、WHERE句で左側をFEの行に限定するので外部結合の効果が残る。
- イWHERE句の条件が緩く、FE以外の資格の行も左側に残ってしまい、余分な行が出力される。
- ウWHERE句で右側の値を条件にすると、右側がNULLの行が除外され、外部結合が内部結合と同じ働きになる。
- エ結合条件をWHERE句に移しているため、こちらも実質的に内部結合となりAPを持たない社員が落ちる。
同じ分野の他の問題
- "従業員"表から、男女それぞれの最年長従業員を除く全ての従業員を取り出すSQL文とするために、aに入れる字句はどれか。こ…2024年度 秋期 午前II 問10
- 表Aと表Bから、どちらか一方にだけ含まれるIDを得るSQL文のaに入れる字句はどれか。 〔SQL文〕 SELECT CO…2023年度 秋期 午前II 問10
- "社員"表から、男女それぞれの最年長社員を除く全ての社員を取り出すSQL文とするために、aに入れる字句はどれか。ここで、…2022年度 秋期 午前II 問12
- "文書"表、"社員"表から結果を得るSQL文のaに入れる字句はどれか。2022年度 秋期 午前II 問6
- "社員"表から、男女それぞれの最年長社員を除く全ての社員を取り出すSQL文とするために、aに入れる字句はどれか。ここで、…2020年度 10月試験 午前II 問10
最終更新:2026-08-25/解説・選択肢ごとの解説は資格暗記が独自に作成しています。問題文と選択肢の出典は上記のとおりです。