MySQLで特定の1行以外のすべての行を削除する方法
MySQLで特定の1行だけを残して、それ以外のすべての行を削除したいケースはよくあります。そのような場合には、DELETE文のWHERE句に比較演算子!=を組み合わせるのが基本的な方法です。
使用する構文は以下の通りです。
delete from yourTableName where yourColumnName != yourValue;
なお、!=の代わりに<>(不等号演算子)を使っても同様の結果が得られます。
サンプルテーブルの作成
まず、動作確認用のテーブルを作成しましょう。
mysql> create table DemoTable ( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, Subject varchar(100) ); Query OK, 0 rows affected (0.65 sec)
データの挿入
次に、INSERTコマンドを使っていくつかのレコードを追加します。
mysql> insert into DemoTable(Subject) values('MySQL');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable(Subject) values('MongoDB');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable(Subject) values('Java');
Query OK, 1 row affected (0.12 sec)
現在のデータを確認
SELECT文でテーブル内の全レコードを表示してみます。
mysql> select *from DemoTable;
出力結果
+----+---------+ | Id | Subject | +----+---------+ | 1 | MySQL | | 2 | MongoDB | | 3 | Java | +----+---------+ 3 rows in set (0.00 sec)
特定の行以外を削除するクエリ
ここでは、「MongoDB」という値を持つ行だけを残し、それ以外の行をすべて削除します。実行するクエリは以下の通りです。
mysql> delete from DemoTable where Subject!='MongoDB'; Query OK, 2 rows affected (0.19 sec)
Query OK, 2 rows affectedと表示されているように、2行が削除されました。
削除後の確認
もう一度テーブルの中身を確認してみましょう。
mysql> select *from DemoTable;
出力結果
+----+---------+ | Id | Subject | +----+---------+ | 2 | MongoDB | +----+---------+ 1 row in set (0.00 sec)
このように、DELETE文のWHERE句で「残したい値以外」という条件を指定するだけで、特定の1行以外のすべての行を簡単に削除できます。
注意点: WHERE句を忘れてDELETE文を実行すると、テーブル内の全データが削除されてしまうため、実行前に必ず条件を確認することをおすすめします。また、対象カラムにNULLが含まれる場合、!=による比較ではNULLの行は削除されない点にも留意してください。
-
MySQLでテーブルから特定の行を抽出するクエリの書き方
MySQLでは、WHERE句とORDER BY、LIMITを組み合わせることで、テーブルから条件に合致する特定の行だけを効率的に取得できます。本記事では、実際にサンプルテーブルを作成し、特定の行を抽出するクエリの実行手順をわかりやすく解説します。 1. サンプルテーブルの作成 まず、CREATE TABLE文を使ってサンプル用のテーブルを作成します。ここでは「Section(組)」と「StudentName(生徒名)」という2つのカラムを持つテーブルを用意しました。 mysql> create table DemoTable1972 ( Section char(1),
-
MySQLで重複行を除外して1行だけ取得する方法(DISTINCTの使い方)
MySQLで重複行から1行のみを返すには?MySQLのテーブルに同じ値を持つ重複行が存在する場合、DISTINCTキーワードを使うことで、重複を排除した一意な行だけを取得できます。この記事では、実際にテーブルを作成し、データを挿入したうえで、DISTINCTによる重複除去の手順を解説します。1. テーブルを作成するまず、サンプル用のテーブルを作成します。mysql> create table DemoTable1998 ( Name varchar(20) ); Query OK, 0 rows affected (0.61 sec)2. レコードを挿入するINSERTコマンドを