DML文による表の操作35 / 50 問

以下のINSERT文を実行したとき、mid_sal表に挿入される行数はどれですか。

SELECT employee_id, salary FROM employees;

EMPLOYEE_ID  SALARY
------------ -------
201          2500
202          3000
203          5000
204          12000

INSERT FIRST
  WHEN salary >= 5000 THEN INTO high_sal VALUES (employee_id, salary)
  WHEN salary >= 3000 THEN INTO mid_sal  VALUES (employee_id, salary)
  ELSE                     INTO low_sal  VALUES (employee_id, salary)
SELECT employee_id, salary FROM employees;
A1行✓
B2行
C3行
D4行
正解:A解説

INSERT FIRSTは、副問合せの各行について上から順にWHEN句を評価し、最初に条件を満たしたWHEN句だけを実行します。

EMPLOYEE_IDSALARY最初に満たすWHEN句挿入先
2012500なし(ELSE)low_sal
2023000salary >= 3000mid_sal
2035000salary >= 5000high_sal
20412000salary >= 5000high_sal

203と204はsalary >= 3000も満たしますが、先にsalary >= 5000を満たしているため、mid_salには挿入されません。そのため、mid_salに挿入されるのは202の1行です。

INSERT FIRST
...
4行が作成されました。

INSERT ALLとINSERT FIRSTの違い

構文WHEN句の扱いmid_salの行数
INSERT ALL条件を満たすすべてのWHEN句を実行する3行
INSERT FIRST最初に条件を満たしたWHEN句だけを実行する1行

どちらの場合も、ELSE句はどのWHEN句も満たさなかった行に対して実行されます。

前後の問題