ここではORACLEデータベースのSQLのDELETE文で副問合せ(サブクエリー)を使う方法を紹介しています。
DELETE文のサンプルは↓で多数紹介していますので参考にしてください。
>>【SQL】DELETE文の書き方:サンプル多数あり
DELETE文の基本構文
DELETE文の基本構文は次の通りです。
WHERE条件で副問合せ(サブクエリ)を使うことが出来ます。
DELETE FROM テーブル名 [WHERE 条件];
副問合せ(サブクエリ)を使ったSQLサンプル
DELETLE文のWHERE句には、自由に副問合せを書くことが出来ます。
IN句を使う方法
次のSQLでは、TAB1テーブルの列を削除するとき、TAB2テーブルのCOL1列と値が一致するレコードだけを削除しています。
DELETE FROM tab1 a
WHERE a.col1 in (SELECT b.col1 FROM tab2 b);
EXISTSを使う方法
先ほどのSQLはIN句を使いましたが、EXISTSを使うこともできます。
次のSQLでは、TAB1テーブルのCOL1列の値がTAB2テーブルに存在するレコードを削除しています。
DELETE FROM tab1 a
WHERE EXISTS (SELECT 'x' FROM tab2 b WHERE b.col1 = a.col1);
副問合せの中でJOINを使う方法
INやEXISTSの他にも、副問合せの中でJOINを使ことも可能です。
次のSQLでは、TAB1テーブルのレコードを削除するとき、TAB2テーブルとTAB3テーブルを結合したレコードと一致する行だけ削除しています。
DELETE FROM tab1 a
WHERE
a.col1 in (SELECT
b.col1
FROM
tab2 b
INNER JOIN tab3 c
ON b.col1 = c.col1);
まとめ
DELETE文では、WHERE句の条件で自由に副問合せ(サブクエリ)を使うことが出来ます。
IN句やEXISTS、JOINなど様々な形で副問合せを使うことが出来ます。
当サイトでは他にも、DELETE文の様々な書き方を解説しております。
詳しくは「【SQL】DELETE文の書き方:サンプル多数あり」で解説しているのでぜひ参考にしてください。