助け合いフォーラム

Oracle DB

Oracle Master Silver SQL 2019(1Z0-071)
問題ID : 26549
問題を開く
EMPLOYEES表の構造を確認して下さい。



次のSQL文の実行結果として、正しいものはどれですか。

 DELETE (SELECT department_id, employee_id FROM employees)
 WHERE salary > 400000;

正解

表名の代わりに指定した副問合せのSELECT句に指定された列しかWHERE句に指定できないため、エラーとなる

解説

DELETE文では、削除の対象となる表を指定する際、表名だけではなく副問合せによる指定をすることができます。
表名の代わりに副問合せを指定したDELETE文では、条件に副問合せで指定した列のみ使用することができます。

設問のSQL文では、副問合せにDEPARTMENT_ID列とEMPLOYEE_ID列が指定されていますが、WHERE句で副問合せに指定されていないSALARY列を使用しているため、エラーとなります。

以上より、
・表名の代わりに指定した副問合せのSELECT句に指定された列しかWHERE句に指定できないため、エラーとなる
が正解となります。

設問のSQL文の実行結果は次のようになります。


 
SQLを表示
DELETE (SELECT department_id, employee_id FROM employees)
 WHERE salary > 400000;


参考:
表に格納されているデータを削除するには、DELETE文を使用します。

 DELETE [FROM] 表名
 [WHERE 条件];

 
 
SQLを表示
SELECT * FROM prod;

DELETE FROM prod
WHERE startdate >= '03-04-01';

SELECT * FROM prod;


FROMキーワードは省略することができます。また、WHERE句に条件を指定すると条件に該当する行だけが削除されますが、条件を指定しない場合は表の全ての行が削除されます。


 
SQLを表示
DELETE prod;

SELECT * FROM prod;


なお、DELETE文では、副問合せを使用することができます。
副問合せは、WHERE句で条件を指定する場合と、削除の対象となる表を表名の代わりに副問合せで指定する場合に使用することができます。

[副問合せで条件を指定する場合]
条件に副問合せを使用すると、異なる表のデータに基いてデータを削除することもできます。


 
SQLを表示
DELETE FROM employees
WHERE employee_id
 IN (SELECT manager_id
 FROM departments
 WHERE department_id = 1);

SELECT * FROM employees
WHERE employee_id
 IN (SELECT manager_id
 FROM departments
 WHERE department_id = 1);


[表名の代わりに副問合せを指定する場合]
DELETE文では、表名の代わりに副問合せを指定することができます。


 
SQLを表示
DELETE (SELECT department_id, employee_id
 FROM employees)
WHERE department_id = 1;


ただし、WHERE句で削除する行の条件を指定する場合、条件には副問合せで指定した列のみ使用することができます。


 
SQLを表示
DELETE (SELECT department_id, employee_id
 FROM employees)
WHERE salary > 400000;
上に戻る

誤字 

投稿日 2026/09/03

解説のところで、「設問のSQL文は文では、」となってるので修正お願いします。

スタッフからの返信

s staff_ishii

2026/09/04 13:16

yT26Yt さん、 ご指摘の点を修正いたしました。 ご報告、誠にありがとうございました。

この投稿に対して返信しませんか?