MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLでNOT INを使って特定のレコードを除外して削除する方法

NOT IN演算子で残したいレコード以外を一括削除する

MySQLでは、DELETE文とNOT IN演算子を組み合わせることで、「削除したくないレコード」を指定し、それ以外のレコードをまとめて削除できます。この記事では、実際にテーブルを作成してデータを挿入し、NOT INを使った削除の手順を順番に解説します。

1. テーブルを作成する

まず、サンプル用のテーブルを作成しましょう。

mysql> create table DemoTable
(
    FirstName varchar(100)
);
Query OK, 0 rows affected (0.65 sec)

2. レコードを挿入する

INSERTコマンドを使って、いくつかのレコードをテーブルに追加します。

mysql> insert into DemoTable values('Chris');
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable values('Robert');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values('Mike');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('Sam');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values('David');
Query OK, 1 row affected (0.12 sec)

3. テーブルの内容を確認する

SELECT文ですべてのレコードを表示してみましょう。

mysql> select *from DemoTable;

実行すると、次のような結果が得られます。

+-----------+
| FirstName |
+-----------+
| Chris     |
| Robert    |
| Mike      |
| Sam       |
| David     |
+-----------+
5 rows in set (0.00 sec)

現在、5件のレコードが登録されていることが確認できます。

4. NOT INを使ってレコードを削除する

ここからが本題です。以下のクエリでは、NOT INを使って「Robert」と「Mike」以外のレコードを削除しています。つまり、指定した名前リストに含まれないレコードだけが削除対象になります。

mysql> delete from DemoTable where FirstName NOT IN('Robert', 'Mike');
Query OK, 3 rows affected (0.17 sec)

「3 rows affected」と表示されている通り、Chris・Sam・Davidの3件が削除されました。

5. 削除後のテーブルを確認する

もう一度SELECT文を実行して、結果を確認しましょう。

mysql> select *from DemoTable;

実行結果は以下の通りです。

+-----------+
| FirstName |
+-----------+
| Robert    |
| Mike      |
+-----------+
2 rows in set (0.00 sec)

まとめ

NOT IN演算子を使えば、「残しておきたいレコード」を条件に指定するだけで、それ以外の不要なレコードを簡単に一括削除できます。INとは逆の動作になるため、大量データの整理やクリーンアップ処理などで非常に便利です。なお、NOT INのリスト内にNULLが含まれると意図しない結果になる場合があるため、実運用ではカラム値にNULLが存在しないか事前に確認しておくと安心です。

  1. JavaのPreparedStatementを使ってMySQLテーブルにレコードを挿入する方法

    JavaのPreparedStatementを使用してMySQLのテーブルにレコードを挿入するには、まずINSERT文の雛形を作成し、値の部分をプレースホルダー(?)で置き換えます。SQLインジェクション対策やパフォーマンス向上の観点からも、この方法は推奨されています。1. INSERT文の基本構文レコード挿入用のSQLは、以下のような構文で記述します。String anyVariableName = INSERT INTO yourTableName(yourColumnName1, yourColumnName2, yourColumnName3, ...N) + VALUES (?, ?

  2. Node.jsでMySQLのレコードを削除する方法を解説

    はじめにデータベースへのレコード挿入後、不要になったデータを削除する場面も必ず出てきます。MySQLでは、テーブル内のレコードを識別子(条件)に基づいて削除することが可能で、その際には「DELETE FROM」ステートメントを使用します。Node.jsからMySQLのレコードを削除する方法は、主に以下の2通りがあります。静的な削除 – あらかじめ決められた条件値を指定して削除する方法です。動的な削除 – 削除前にユーザーから入力を受け取り、その値に基づいて削除を実行する方法です。事前準備作業を始める前に、以下のコマンドがすでに実行済みであることを確認してください。mkdir mysql-tes