MySQLでNOT IN()を使ってテーブルから特定の値を除外する方法
MySQLでは、NOT IN()句を使用することで、テーブルから特定の値を除外してデータを取得できます。条件に含めたくない値をリストで指定するだけで、それらを除いたレコードを簡単に抽出できます。
サンプルテーブルの作成
まず、動作確認用のテーブルを作成しましょう。
mysql> create table DemoTable791 ( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, FirstName varchar(100) ); Query OK, 0 rows affected (0.61 sec)
テストデータの挿入
次に、INSERTコマンドを使っていくつかのレコードを挿入します。
mysql> insert into DemoTable791(FirstName) values('Chris');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable791(FirstName) values('Robert');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable791(FirstName) values('David');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable791(FirstName) values('Mike');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable791(FirstName) values('Bob');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable791(FirstName) values('Carol');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable791(FirstName) values('Adam');
Query OK, 1 row affected (0.09 sec)登録済みレコードの確認
SELECT文ですべてのレコードを表示してみましょう。
mysql> select *from DemoTable791;
実行すると、以下のような出力が得られます。
+----+-----------+ | Id | FirstName | +----+-----------+ | 1 | Chris | | 2 | Robert | | 3 | David | | 4 | Mike | | 5 | Bob | | 6 | Carol | | 7 | Adam | +----+-----------+ 7 rows in set (0.00 sec)
NOT IN()で特定の値を除外するクエリ
ここで、Idが4、5、6のレコード(Mike、Bob、Carol)を除外して取得したい場合、次のようにNOT IN()を使用します。
mysql> select *from DemoTable791 where Id NOT IN(4,5,6);
実行結果は以下のとおりです。指定したIDのレコードが除外され、残りの4件のみが表示されています。
+----+-----------+ | Id | FirstName | +----+-----------+ | 1 | Chris | | 2 | Robert | | 3 | David | | 7 | Adam | +----+-----------+ 4 rows in set (0.00 sec)
補足:NOT IN()使用時の注意点
NOT IN()は便利な構文ですが、除外対象のカラムにNULLが含まれる可能性がある場合は注意が必要です。NULLとの比較は常にUNKNOWNと評価されるため、意図しない結果になることがあります。そのようなケースでは、NOT EXISTSやLEFT JOIN ... IS NULLの利用も検討するとよいでしょう。
-
MySQLで2つの列のすべての値をカウントし、NULL値を除外する方法
MySQLでは、COUNT関数を組み合わせることで、複数の列に含まれるすべての値をカウントできます。COUNT関数はNULL値を自動的に除外するため、NULLが混在するデータでも正確な合計件数を取得できるのが特徴です。ここでは、2つの列の値をカウントし、NULL値を除外した合計カウントを求める方法を具体的な例で解説します。 1. サンプルテーブルの作成 まず、学生名と点数を格納するテーブルを作成します。 mysql> create table DemoTable1975 ( StudentNa
-
MySQLのINSERT INTO SELECT文で別のテーブルの値を挿入する方法
あるテーブルの値を基に別のテーブルへデータを挿入したい場合は、INSERT INTO SELECT文を使用します。この構文では、SELECT文で抽出した結果セットをそのまま対象テーブルへ流し込めるため、テーブル間のデータ移行やコピーにもっとも効率的な方法の一つです。 以下の手順で、実際の動作を順番に確認していきましょう。 手順1:元となるテーブルを作成する まず、データのコピー元となるテーブル「demo82」を作成します。 mysql> create table demo82 -> (