SC Workbook
科目 A-2 · データベース

外部結合と WHERE 句の条件

部署ごとの在籍者数を,在籍者がいない部署は 0 として出力する意図で,次の SQL を作成した。表 dept と表 emp の内容が次のとき,この SQL の実行結果として適切なものはどれか。

dept         emp
dept_id      emp_id  dept_id  status
10           1       10       ACTIVE
20           2       20       ACTIVE
30           3       20       ACTIVE
40           4       30       RETIRED
SELECT d.dept_id, COUNT(e.emp_id) AS cnt
  FROM dept d LEFT OUTER JOIN emp e
    ON d.dept_id = e.dept_id
 WHERE e.status = 'ACTIVE'
 GROUP BY d.dept_id
 ORDER BY d.dept_id
  1. ア(10, 1),(20, 2) の 2 行
  2. イ(10, 1),(20, 2),(30, 0),(40, 0) の 4 行
  3. ウ(10, 1),(20, 2),(40, 0) の 3 行
  4. エ(10, 1),(20, 2),(30, NULL),(40, NULL) の 4 行
正解と解説を見る

正解 ア

この問題の基礎知識

  • 左外部結合は,内部結合の結果に,結合相手のない左側の表の行を,右側の表の列を NULL として補って加える。
  • ON 句の条件は結合の時点で評価され,WHERE 句の条件は結合後の結果に対して評価される。外部結合では,右側の表の列に対する条件をどちらに書くかで結果が変わる。
  • SQL の比較演算は,一方が NULL なら真でも偽でもない不明(UNKNOWN)となる。WHERE 句は条件が真の行だけを残し,偽や不明の行は除く。
  • COUNT(列) は NULL でない値の個数を数え,該当する値がなければ 0 を返す。SUM や AVG などは,対象の値が一つもなければ NULL を返す。
ア(10, 1),(20, 2) の 2 行正解

外部結合で部署 30 と社員 4 の行,部署 40 と NULL の行ができるが,WHERE 句は結合の後に評価される。status が 'RETIRED' の行と NULL の行は条件を満たさずに除かれるので,部署 30 と 40 は出力されない。

イ(10, 1),(20, 2),(30, 0),(40, 0) の 4 行

条件を ON 句に書いた場合(ON d.dept_id = e.dept_id AND e.status = 'ACTIVE')の結果である。ON 句の条件は結合の時点で評価されるので部署 30 と 40 は NULL で補われた行として残るが,WHERE 句の条件は結合の後に評価される。

ウ(10, 1),(20, 2),(40, 0) の 3 行

部署 40 の行の e.status は NULL であり,NULL = 'ACTIVE' の比較結果は真ではなく不明(NULL)となる。WHERE 句は条件が真となる行だけを残すので,NULL の行も RETIRED の行と同様に除かれる。

エ(10, 1),(20, 2),(30, NULL),(40, NULL) の 4 行

COUNT(列) は NULL でない値の個数を返し,対象の値がなくても NULL ではなく 0 を返す(NULL を返すのは SUM などの他の集約関数である)。そもそも部署 30 と 40 の行は WHERE 句によって除かれる。

検証用の出典出典照合済み
PostgreSQL Documentation: Table Expressions(Joined Tables,The WHERE Clause) / PostgreSQL Documentation: Comparison Functions and Operators / PostgreSQL Documentation: Aggregate Functions(count)
照合の根拠(5 件)

検算: 結合結果は (10,1,ACTIVE),(20,2,ACTIVE),(20,3,ACTIVE),(30,4,RETIRED),(40,NULL,NULL)。WHERE e.status = 'ACTIVE' で先頭 3 行だけが残り,GROUP BY で (10, 1),(20, 2) の 2 行になる。

問題 ID A2-DBS-0002 · AI 作成のオリジナル問題 · 正解と各選択肢の根拠を出典の原文で確認しています。 照合日 2026-11-08

非公式の学習用アプリです(IPA とは関係ありません)。問題はすべて AI が作成したオリジナルで、誤りを含む場合があります。