基本情報技術者試験 科目 A — SQL 練習問題 第 10 問 / 14
外部結合と COUNT の組み合わせ|基本情報 SQL
「部門」表 (4 部門) と「従業員」表に対して次の SQL を実行したとき、監査室の行の値はどれか。監査室に所属する従業員はいない。
この問題で使う表
部門
| 部門コード | 部門名 |
|---|---|
| D01 | 営業部 |
| D02 | 開発部 |
| D03 | 総務部 |
| D04 | 監査室 |
4 行
従業員
| 社員番号 | 氏名 | 部門コード | 給与 | 入社日 |
|---|---|---|---|---|
| E01 | 青木 | D01 | 320000 | 2019-04-01 |
| E02 | 井上 | D01 | 280000 | 2021-04-01 |
| E03 | 上田 | D01 | 410000 | 2015-04-01 |
| E04 | 遠藤 | D02 | 380000 | 2018-10-01 |
| E05 | 大野 | D02 | 450000 | 2013-04-01 |
| E06 | 加藤 | D03 | 300000 | 2022-04-01 |
| E07 | 木村 | D03 | NULL | 2026-04-01 |
7 行
SELECT 部門.部門名, COUNT(従業員.社員番号)
FROM 部門 LEFT OUTER JOIN 従業員
ON 部門.部門コード = 従業員.部門コード
GROUP BY 部門.部門名解答を選ぶ
解説
正解: ア監査室 | 0
LEFT OUTER JOIN なので、従業員がいない監査室も左の表の行として残ります。よってエは誤りです。
このとき従業員側の列はすべて NULL になります。監査室のグループは「社員番号が NULL の 1 行」です。
COUNT(社員番号) は NULL を数えないので 0 になります。ここで COUNT(*) と書くと、行としては 1 行あるので 1 になってしまいます。
「所属者ゼロを 0 と出したい」ときに COUNT(*) ではなく COUNT(列) を使う理由がこれです。
引っかけの正体
COUNT(*) と COUNT(列) を同じだと思い、1 を選ぶ
この問題のもとになっている解説: GROUP BY と HAVING — WHERE との違い
データベース分野をもっと学ぶ(おすすめ書籍)
キタミ式イラストIT塾 基本情報技術者 令和08年
きたみりゅうじ
イラスト主体で科目Aの全範囲を通読できる入門書。用語の土台を作ってから科目Bのアルゴリズムに入ると理解が速い。
Amazon で見る →
令和08年 イメージ&クレバー方式でよくわかる かやのき先生の基本情報技術者教室
栢木厚
科目Aの頻出テーマを図と語呂で押さえる入門書。参考書と問題集を兼ねるので初受験の一冊目に選びやすい。
Amazon で見る →
令和08年 基本情報技術者 パーフェクトラーニング過去問題集
山本三雄
公開問題を大量に解いて仕上げるための問題集。擬似言語の読解に慣れた後、本番形式で時間配分を試す段階で使う。
Amazon で見る →
本セクションはAmazonアソシエイトのリンクを含みます。