【SQL】DELETE文でサブクエリ(副問合せ)を使う方法


ここでは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文の書き方:サンプル多数あり」で解説しているのでぜひ参考にしてください。