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

以下のMERGE文で、bonuses表の各行はどうなりますか。

SELECT employee_id, bonus FROM bonuses;

EMPLOYEE_ID  BONUS
------------ ------
101          100
102          200
109          50

SELECT employee_id, salary FROM employees WHERE department_id = 10;

EMPLOYEE_ID  SALARY
------------ -------
101          3000
102          4000
103          5000

MERGE INTO bonuses b
USING (SELECT employee_id, salary FROM employees WHERE department_id = 10) e
ON (b.employee_id = e.employee_id)
WHEN MATCHED THEN
  UPDATE SET b.bonus = e.salary * 0.1
WHEN NOT MATCHED THEN
  INSERT (employee_id, bonus) VALUES (e.employee_id, e.salary * 0.05);
A101:300、102:400、103:250、109:50✓
B101:300、102:400、103:250、109は削除される
C101:100、102:200、103:250、109:50
Dエラーになる
正解:A解説

MERGE文は、USING句の行(ソース)ごとにON句の条件を評価し、ターゲットの表に一致する行があればWHEN MATCHED、なければWHEN NOT MATCHEDの処理を行います。

ソースの行bonusesとの一致処理結果のBONUS
101ありUPDATE(3000 × 0.1)300
102ありUPDATE(4000 × 0.1)400
103なしINSERT(5000 × 0.05)250

ソースに存在しない109の行は、MERGE文の対象にならないためそのまま残ります。

MERGE INTO bonuses b
...
3行がマージされました。

SELECT employee_id, bonus FROM bonuses;

EMPLOYEE_ID  BONUS
------------ ------
101          300
102          400
109          50
103          250

前後の問題