MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLのWHERE句で複数の値(x、y、z)を指定する方法|IN演算子の使い方

MySQLで「WHERE カラム名 = 'x'」のように単一の値を抽出する場合は等号(=)を使いますが、「x、y、zのように複数の値のいずれかに一致するレコードを取得したい」というケースはよくあります。そのような場合に便利なのがIN演算子です。

IN演算子の基本構文

IN演算子を使うと、複数の候補値のいずれかに一致する行を一度に取得できます。構文は以下のとおりです。

SELECT *FROM テーブル名
WHERE カラム名 IN('値1','値2','値3',...........N);

サンプルテーブルの作成

それでは、実際にテーブルを作成して動きを確認してみましょう。まずはテーブル作成用のクエリです。

mysql> create table InOperatorDemo
    -> (
    -> ClientId int
    -> );
Query OK, 0 rows affected (0.52 sec)

テストデータの挿入

次に、INSERT文を使っていくつかのレコードを挿入します。

mysql> insert into InOperatorDemo values(101);
Query OK, 1 row affected (0.19 sec)
mysql> insert into InOperatorDemo values(110);
Query OK, 1 row affected (0.11 sec)
mysql> insert into InOperatorDemo values(120);
Query OK, 1 row affected (0.17 sec)
mysql> insert into InOperatorDemo values(230);
Query OK, 1 row affected (0.11 sec)
mysql> insert into InOperatorDemo values(270);
Query OK, 1 row affected (0.15 sec)
mysql> insert into InOperatorDemo values(300);
Query OK, 1 row affected (0.14 sec)

登録データの確認

SELECT文ですべてのレコードを表示してみます。

mysql> select *from InOperatorDemo;

実行結果は以下のとおりです。

+----------+
| ClientId |
+----------+
| 101      |
| 110      |
| 120      |
| 230      |
| 270      |
| 300      |
+----------+
6 rows in set (0.00 sec)

IN演算子を使った抽出クエリ

ここからが本題です。ClientIdが「120」「270」「300」のいずれかに一致するレコードをIN演算子で抽出してみます。

mysql> select *from InOperatorDemo where ClientId IN('120','270','300');

実行結果は以下のとおりです。指定した3つの値に一致するレコードだけが正しく取得できていますね。

+----------+
| ClientId |
+----------+
| 120      |
| 270      |
| 300      |
+----------+
3 rows in set (0.00 sec)

まとめ

複数の値を検索条件にしたい場合は、OR条件を何度も書き連ねる代わりにIN演算子を使うことで、SQLをシンプルかつ読みやすくできます。候補値はカンマ区切りで必要なだけ列挙できるので、大量のデータを扱う際にも活用してみてください。

  1. MySQLで列(カラム)の値を置き換える方法|UPDATE文の使い方を解説

    MySQLでテーブルの特定の列(カラム)の値を置き換えたい場合には、UPDATE文を使用します。WHERE句で対象のレコードを指定することで、該当する行だけを安全に更新できます。この記事では、実際のSQLサンプルを使いながら、列の値を置き換える手順を順番に解説していきます。1. サンプルテーブルを作成するまず、動作確認用のテーブルを作成しましょう。以下のクエリを実行します。mysql> create table DemoTable ( StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY, Score int ); Query

  2. 【MySQL】特定の列の値が0のみの行を別の列でグループ化して抽出する方法

    はじめに 「ある列の値が0のみの行を抽出し、さらに別の列でグループ化したい」,そんな場合には、GROUP BY句とHAVING句を組み合わせるのが効果的です。この記事では、実際にテーブルを作成し、データを挿入しながら、目的の結果を得るまでの手順を具体例とともに解説します。 1. サンプルテーブルの作成 まずはCREATE TABLE文でテーブルを作成しましょう。 mysql> create table DemoTable1344 -> ( -> `SequenceId` int NOT NULL AUTO_INCREMENT PRIMARY KEY,