【SQL】DELETEである表に存在しないデータを削除する方法


ここではORACLEデータベースのSQLのDELETE文で、別のある表の存在しないデータだけをチェックして削除することが出来ます。

DELETE文のサンプルは↓で多数紹介していますので参考にしてください。
>>【SQL】DELETE文の書き方:サンプル多数あり

DELETE文の基本構文

DELETE文の基本構文は次の通りです。

WHERE条件を指定することで、別のある表に存在しないデータだけを削除することが出来ます。

DELETE FROM テーブル名 [WHERE 条件];

ある表に存在しないデータだけ削除する方法

ある表に存在しないレコードのみ削除する方法をいくつか紹介していきます。

NOT EXISTSを使う方法

ある表にデータが存在するか、存在チェックをNOT EXISTSを使い行う方法です。

次のSQLでは、TAB1テーブルの列を削除するとき、TAB2に一致するレコードが存在しないデータだけを削除しています。

DELETE FROM tab1 a
WHERE
    NOT EXISTS (SELECT
                   'x'
                FROM
                    tab2 b
                WHERE
                    b.col1 = a.col1);

複数の条件を指定するときは、WHERE句にカラムを追加します。

DELETE FROM tab1 a
WHERE
    NOT EXISTS (SELECT
                   'x'
                FROM
                    tab2 b
                WHERE
                    b.col1 = a.col1
                    and b.col2 = a.col2);

IN句を使う方法

ある表のデータと一致しないデータでけ選択するときに、NOT INを使います。

次のSQLでは、TAB1テーブルの列を削除するとき、TAB2に一致するレコードが存在しないデータだけを削除しています。

先ほどのNOT EXISTSと結果は同じになります。

DELETE FROM tab1 a
WHERE
    a.col1 NOT IN (SELECT
                       b.col1
                   FROM 
                       tab2 b);

複数の条件を指定するときは、次のように書きます。

DELETE FROM tab1 a
WHERE
    (a.col1,a.col2) NOT IN (SELECT
                               b.col1
                               ,b.col2
                            FROM 
                               tab2 b);

まとめ

DELETE文で、別のある表に存在しないデータだけを削除する場合は、NOT EXISTSやNOT INを使います。

当サイトでは他にも、DELETE文の様々な書き方を解説しております。
詳しくは「【SQL】DELETE文の書き方:サンプル多数あり」で解説しているのでぜひ参考にしてください。