MySQLで特定の値が存在しないレコードを抽出する方法(NOT IN句の使い方)
MySQLでテーブルから「特定の値を含まない」レコードだけを取得したい場合は、NOT IN() 句を使用します。この記事では、実際にサンプルテーブルを作成しながら、NOT IN句の基本的な使い方を解説します。
サンプルテーブルの作成
まず、学生情報を格納するためのテーブルを作成しましょう。StudentId を主キー(AUTO_INCREMENT)とし、StudentName カラムを持つシンプルなテーブルです。
mysql> create table DemoTable1991
(
StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentName varchar(20)
);
Query OK, 0 rows affected (0.61 sec)テストデータの挿入
次に、INSERT文を使っていくつかのレコードを登録します。
mysql> insert into DemoTable1991(StudentName) values('Chris');
Query OK, 1 row affected (0.24 sec)
mysql> insert into DemoTable1991(StudentName) values('Bob');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1991(StudentName) values('David');
Query OK, 1 row affected (0.08 sec)
mysql> insert into DemoTable1991(StudentName) values('Sam');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable1991(StudentName) values('Mike');
Query OK, 1 row affected (0.11 sec)登録データの確認
SELECT文ですべてのレコードを表示してみましょう。
mysql> select * from DemoTable1991;
以下のような結果が出力されます。
+-----------+-------------+ | StudentId | StudentName | +-----------+-------------+ | 1 | Chris | | 2 | Bob | | 3 | David | | 4 | Sam | | 5 | Mike | +-----------+-------------+ 5 rows in set (0.03 sec)
NOT IN句で値が存在しないレコードを取得する
ここからが本題です。「Bob」「Sam」「Mike」以外のレコード、つまり指定した値が存在しない行だけを抽出するには、WHERE句と組み合わせてNOT IN()を使用します。
mysql> select * from DemoTable1991
where StudentName NOT IN('Bob','Sam','Mike');実行結果は以下の通りです。指定した3名が除外され、残りの2件のみが取得できています。
+-----------+-------------+ | StudentId | StudentName | +-----------+-------------+ | 1 | Chris | | 3 | David | +-----------+-------------+ 2 rows in set (0.04 sec)
まとめ
NOT IN句を使えば、除外したい値をカンマ区切りでリストアップするだけで、条件に一致しないレコードを簡単に絞り込むことができます。
なお、NOT INを使用する際には注意点があります。対象カラムにNULLが含まれる場合、意図した結果が返らないことがあります。NULLを含む可能性がある列に対しては、NOT EXISTS や LEFT JOIN ... IS NULL の活用も検討するとよいでしょう。また、大量のデータを扱う場合はパフォーマンスへの影響も考慮してください。
-
MySQL:テーブルがまだ存在しない場合は作成し、同じクエリでレコードを挿入する方法
CREATE TABLE IF NOT EXISTS を使ったテーブル作成とデータ挿入MySQLでは、テーブルがまだ存在しない場合にのみテーブルを作成し、そのまま1つのクエリでレコードを挿入することができます。この処理には CREATE TABLE IF NOT EXISTS を使用します。基本の構文は以下のとおりです。create table if not exists yourTableName ( yourColumnName1 dataType, yourColumnName2 dataType, yourColumnName3 dataType, .
-
MySQLで重複レコードを含むテーブルから特定の値を1件だけ削除する方法
MySQLでテーブル内のレコードを削除するにはDELETE文を使用します。しかし、同じ値の重複レコードが複数存在する場合に、そのうち1件だけを削除したいケースがあります。そんなときは、LIMIT句を組み合わせることで、削除対象の件数を制限できます。基本構文delete from yourTableName where yourColumnName=yourValue limit 1;この構文では、WHERE句で削除対象の条件を指定し、LIMIT 1によって該当するレコードのうち最初の1件のみを削除します。実際にテーブルを作成して確認してみようまず、サンプル用のテーブルを作成します。mysql&