【MySQL】セル内の文字列が一致した場合にテーブル行を削除するクエリの書き方
はじめに
MySQLでは、DELETE文とLIKE句を組み合わせることで、特定の文字列が含まれるセル(カラム)を持つ行を効率的に削除できます。この記事では、実際のサンプルを通じて、セル内の文字列が一致した場合にテーブルの行を削除する方法を解説します。
テーブルの作成
まず、サンプル用のテーブルを作成しましょう。
mysql> create table DemoTable
(
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
Name varchar(100)
);
Query OK, 0 rows affected (0.55 sec)レコードの挿入
INSERTコマンドを使って、テーブルにいくつかのレコードを挿入します。
mysql> insert into DemoTable(Name) values('John Smith');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable(Name) values('Carol Taylor');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable(Name) values('John Doe');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable(Name) values('Chris Brown');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable(Name) values('John Brown');
Query OK, 1 row affected (0.19 sec)レコードの表示
SELECTステートメントで、テーブル内のすべてのレコードを表示してみましょう。
mysql> select *from DemoTable;
実行すると、以下のような出力が得られます。
+----+--------------+ | Id | Name | +----+--------------+ | 1 | John Smith | | 2 | Carol Taylor | | 3 | John Doe | | 4 | Chris Brown | | 5 | John Brown | +----+--------------+ 5 rows in set (0.00 sec)
文字列が一致した行を削除するクエリ
セル内の文字列が一致した行を削除するには、DELETE文とLIKE句を組み合わせます。以下は、Nameカラムに「ohn」という文字列を含む行をすべて削除するクエリです。
mysql> delete from DemoTable where Name like '%ohn%'; Query OK, 3 rows affected (0.16 sec)
ここで使っている「%」はワイルドカードと呼ばれ、任意の長さの文字列にマッチします。「%ohn%」と指定することで、「John Smith」「John Doe」「John Brown」のように、名前の中に「ohn」が含まれる3行が削除対象になります。
削除結果の確認
もう一度、テーブルのレコードを確認してみましょう。
mysql> select *from DemoTable;
実行すると、以下のような出力が得られます。
+----+--------------+ | Id | Name | +----+--------------+ | 2 | Carol Taylor | | 4 | Chris Brown | +----+--------------+ 2 rows in set (0.00 sec)
まとめ
DELETE文とLIKE句を組み合わせれば、特定の文字列を含む行を簡単に削除できます。「John」で始まる行だけでなく、「ohn」が途中に含まれる行もすべて削除されている点に注目してください。なお、条件の指定方法により挙動が変わります。完全一致なら「=」演算子、前方一致なら「'John%'」、後方一致なら「'%Smith'」のように使い分けるとよいでしょう。削除は元に戻せないため、実行前に必ずSELECTで対象行を確認することをおすすめします。
-
MySQLでテーブル内の特定の行だけを削除する方法|NOT IN()を使った実践テクニック
MySQLで特定の行以外を一括削除したい場合、NOT IN() 演算子を使用すると簡単に実現できます。NOT IN() は「指定した値のリストに含まれない行」を対象にできるため、残したい行のIDを列挙すれば、それ以外の行だけを効率よく削除できます。この記事では、サンプルテーブルを作成し、実際にデータを挿入してから、NOT IN() を使って特定の行のみを削除する手順を解説します。1. サンプルテーブルの作成まずは、StudentId を自動採番(AUTO_INCREMENT)に設定したテーブルを作成します。AUTO_INCREMENT=101 を指定することで、IDは101から順番に割り振られ
-
MySQLのDELETE文とIN句を組み合わせて1つのクエリで複数レコードを削除する方法
MySQLでは、IN()句を活用することで、複数の条件値に一致するレコードを1つのDELETEクエリでまとめて削除できます。個別に削除クエリを実行する必要がなく、効率的なデータ操作が可能になります。ここでは、サンプルテーブルを作成し、実際にIN()句を使ったレコード削除の手順を解説します。1. サンプルテーブルの作成まず、テーブルを作成しましょう。mysql> create table DemoTable1922 ( StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY, StudentName varchar(20)