Oracle Database SQL(ORACLE MASTER Silver SQL 2019) 無料問題 6 / 10 ・ 分野7: 複数の表からのデータの表示
departments 表の department_id は 10、20、30 の3行、employees 表の department_id は 10、10、20 の3行である。次の SELECT 文が返す行数として正しいものはどれか。 SELECT d.department_id FROM departments d LEFT OUTER JOIN employees e ON d.department_id = e.department_id;
- 4行:部門10が2行、20が1行、30が1行
- 9行:3行 × 3行の組み合わせが返る
- 1行:一致する行の無い部門30が返る
- 3行:一致した組の数が返る
正解と解説を見る
正解: A
正解の理由
SQL Language Reference の「Joins」は、A の全行を返す左外部結合では、B に一致する行が無い A の行についても、B の列の式を NULL にして返すと定める。部門10は従業員2人と一致して2行、部門20は1行、部門30は一致が無いが NULL を付けて1行残るので、合計4行になる。
違う選択肢
「3行:一致した組の数が返る」… 内部結合の考え方で、一致した組だけを数えている。左外部結合は、一致しない部門30の行も残るので、3行では足りない
「1行:一致する行の無い部門30が返る」… 一致する行の無い行だけを返すと読んだ説明である。左外部結合は、一致した組も、一致しない左の行も、どちらも返す
「9行:3行 × 3行の組み合わせが返る」… 結合条件を省略したときの行数である。ON 句の条件があるので、一致する組と、一致しない部門の行が返る
押さえどころ
左外部結合の行数は、一致した組の数に、一致しなかった左の行の数を足したものである。左の行は1行も失われない。
Oracle Database SQL(ORACLE MASTER Silver SQL 2019)の演習アプリ(無料10問・全問は購入で)へ