メインコンテンツへ
データベース

SQL の JOIN(結合)に関する記述として、適切なものはどれか。 社員テーブル:社員ID、氏名、部署ID(NULLあり) 部署テーブル:部署ID、部署名

ア.INNER JOINは両方のテーブルに存在するレコードのみを返す。部署IDがNULLの社員は結果に含まれない。正解
イ.LEFT OUTER JOINは右テーブルに一致するレコードがなくても、左テーブルのすべてのレコードを返す。部署IDがNULLの社員は結果に含まれない。
ウ.INNER JOINは部署IDがNULLの社員も含め、全社員のレコードを返す。
エ.LEFT OUTER JOINは右テーブルのレコードのみを返し、左テーブルに一致がなければNULLを表示する。

解説

INNER JOINは「合コンで必ずカップルになれた人だけ残る」方式。LEFT JOINは「左側の人は全員残り、相手がいない人はフリーのまま(NULL)残る」方式です。

なぜ ア が正解か

INNER JOIN(内部結合)は結合条件が成立するレコードのみを返します。社員テーブルの部署IDがNULLの場合、どの部署テーブルの部署IDとも一致しないため、そのレコードは結果から除外されます。INNER JOINは「交差点(インターセクション)」のイメージです。

なぜ イ は間違いか

LEFT OUTER JOINの説明前半は正しいですが、「部署IDがNULLの社員は結果に含まれない」が誤りです。LEFT JOINでは左テーブル(社員)の全レコードが返るため、部署IDがNULLで部署テーブルと一致しない社員も含まれます(部署名はNULLになります)。

なぜ ウ は間違いか

INNER JOINは部署IDがNULLの社員を含みません。NULLはどの値とも一致しない(NULL = NULL も偽)ため、内部結合の条件を満たさず除外されます。「全社員を返す」のはFULL OUTER JOINかLEFT JOINです。

なぜ エ は間違いか

LEFT OUTER JOINは左テーブルの全レコードを返し、右テーブルに一致がない場合は右側のカラムがNULLになります。「右テーブルのレコードのみを返す」という説明は完全に左右が逆です。それはRIGHT JOINすら正確に説明していません。

出典: AI生成問題(学習用)