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 句の条件は慎重に設計しましょう。
-
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
-
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(