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

MySQLでテーブル内の特定の行だけを削除する方法|NOT IN()を使った実践テクニック

MySQLで特定の行以外を一括削除したい場合、NOT IN() 演算子を使用すると簡単に実現できます。NOT IN() は「指定した値のリストに含まれない行」を対象にできるため、残したい行のIDを列挙すれば、それ以外の行だけを効率よく削除できます。

この記事では、サンプルテーブルを作成し、実際にデータを挿入してから、NOT IN() を使って特定の行のみを削除する手順を解説します。

1. サンプルテーブルの作成

まずは、StudentId を自動採番(AUTO_INCREMENT)に設定したテーブルを作成します。AUTO_INCREMENT=101 を指定することで、IDは101から順番に割り振られます。

mysql> create table DemoTable1830
    (
    StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    StudentName varchar(20)
    )AUTO_INCREMENT=101;
Query OK, 0 rows affected (0.00 sec)

2. テストデータの挿入

次に、INSERT文を使って5件のレコードを登録します。

mysql> insert into DemoTable1830(StudentName) values('Chris');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1830(StudentName) values('David');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1830(StudentName) values('Mike');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1830(StudentName) values('Sam');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1830(StudentName) values('Bob');
Query OK, 1 row affected (0.00 sec)

3. 登録されたレコードの確認

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

mysql> select * from DemoTable1830;

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

+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
|       101 | Chris       |
|       102 | David       |
|       103 | Mike        |
|       104 | Sam         |
|       105 | Bob         |
+-----------+-------------+
5 rows in set (0.00 sec)

4. NOT IN() を使って特定の行以外を削除

ここで、StudentId が 101・103・105 の行を残し、それ以外(102 と 104)を削除したいとします。その場合は、以下のように DELETE 文と NOT IN() を組み合わせます。

mysql> delete from DemoTable1830
    where StudentId NOT IN('101','103','105');
Query OK, 2 rows affected (0.00 sec)

このクエリにより、「101・103・105 以外のIDを持つ行」、つまり David(102)と Sam(104)の2行が削除されます。

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

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

mysql> select * from DemoTable1830;

実行結果:

+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
|       101 | Chris       |
|       103 | Mike        |
|       105 | Bob         |
+-----------+-------------+
3 rows in set (0.00 sec)

まとめ

MySQLで特定の行のみを残して他を削除したい場合、DELETE 文の WHERE 句に NOT IN(値リスト) を指定するのが有効です。逆に、指定した行だけを削除したい場合は IN() を使えばOKです。

なお、本番環境で DELETE 文を実行する際は、必ず先に SELECT 文で対象行を確認してから実行するのが安全です。誤操作によるデータ消失を防ぐためにも、WHERE 句の条件は慎重に設計しましょう。

  1. JavaのPreparedStatementを使ってMySQLテーブルを更新する方法

    JavaからMySQLのテーブルを更新するには、PreparedStatementを使用するのが一般的で安全な方法です。PreparedStatementを使うことで、SQLインジェクションを防ぎつつ、パラメータを動的に設定できます。この記事では、実際にテーブルを作成し、Javaプログラムからレコードを更新するまでの一連の手順を解説します。1. テーブルの作成まず、MySQLで更新用のテーブルを作成しましょう。mysql> create table DemoTable( Id int, FirstName varchar(40) ); Query OK, 0 rows a

  2. MySQLでDEFAULTキーワードを使ってデフォルト値を設定したテーブルを作成する方法

    MySQLでは、テーブル作成時にカラムのデータ型の後にDEFAULTキーワードを指定することで、そのカラムにデフォルト値を設定できます。INSERT文で値が指定されなかった場合、自動的にこのデフォルト値が適用されます。テーブルの作成例それでは、実際にデフォルト値を持つテーブルを作成してみましょう。mysql> create table demo33 -> ( -> id int not null auto_increment primary key, -> name varchar(20) not null, -> start_date date default(