SQLでは、IN
演算子を使用すると、値のリストに基づいてクエリ結果をフィルタリングできます。
また、これを使用して、サブクエリによって返される任意の値と一致させることもできます(サブクエリは、別のクエリ内にネストされたクエリです)。
ソーステーブル
このページの例では、次の表を使用しています。
SELECT * FROM PetTypes;
SELECT * FROM Pets;
結果:
+-------------+-----------+ | PetTypeId | PetType | |-------------+-----------| | 1 | Bird | | 2 | Cat | | 3 | Dog | | 4 | Rabbit | +-------------+-----------+ (4 rows affected) +---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 2 | 3 | 3 | Fetch | 2019-08-16 | | 3 | 2 | 2 | Scratch | 2018-10-01 | | 4 | 3 | 3 | Wag | 2020-03-15 | | 5 | 1 | 1 | Tweet | 2020-11-28 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +---------+-------------+-----------+-----------+------------+ (8 rows affected)
例
IN
を示す例を次に示します。 オペレーター。
SELECT
PetId,
PetName,
DOB
FROM Pets
WHERE PetName IN ('Fluffy', 'Bark', 'Wag');
結果:
+---------+-----------+------------+ | PetId | PetName | DOB | |---------+-----------+------------| | 1 | Fluffy | 2020-11-20 | | 4 | Wag | 2020-03-15 | | 6 | Fluffy | 2020-09-17 | | 7 | Bark | NULL | +---------+-----------+------------+
2つのOR
を使用しても、同じ結果を得ることができます。 演算子:
SELECT
PetId,
PetName,
DOB
FROM Pets
WHERE PetName = 'Fluffy'
OR PetName = 'Bark'
OR PetName = 'Wag';
ただし、IN
演算子はそれを行うためのより簡潔な方法です。 IN
演算子は、比較する値のリストが長い場合に特に役立ちます。
IN
ほとんどの場合、演算子は複数のOR
よりも高速に実行されます 演算子、特に大規模なデータセットの場合。
数値
値は文字列だけに限定されません。たとえば、IN
を使用できます 数値のリストにあります。
SELECT
PetId,
PetName,
DOB
FROM Pets
WHERE PetId IN (1, 3, 5);
結果:
+---------+-----------+------------+ | PetId | PetName | DOB | |---------+-----------+------------| | 1 | Fluffy | 2020-11-20 | | 3 | Scratch | 2018-10-01 | | 5 | Tweet | 2020-11-28 | +---------+-----------+------------+
日付
日付のリストを使用する例を次に示します。
SELECT
PetId,
PetName,
DOB
FROM Pets
WHERE DOB IN (
'2020-11-20',
'2018-10-01',
'2015-10-01'
);
結果:
+---------+-----------+------------+ | PetId | PetName | DOB | |---------+-----------+------------| | 1 | Fluffy | 2020-11-20 | | 3 | Scratch | 2018-10-01 | +---------+-----------+------------+
IN
の使用 サブクエリあり
IN
のもう1つの利点 演算子は、別のSELECT
を含めることができるということです リスト。これはサブクエリとして知られています 。サブクエリは、別のクエリ(または別のサブクエリ)内にネストされたクエリです。
これが例です。
SELECT
PetTypeId,
PetType
FROM PetTypes
WHERE PetTypeId IN ( SELECT PetTypeId FROM Pets );
結果:
+-------------+-----------+ | PetTypeId | PetType | |-------------+-----------| | 1 | Bird | | 2 | Cat | | 3 | Dog | +-------------+-----------+
この例は、ペットホテルにペットの種類がいくつあるかを示しています。
NOT IN
の使用
NOT
を追加できます これを裏返して、ペットの種類がいくつあるかを確認するオペレーター 私たちのペットホテルで。
SELECT
PetTypeId,
PetType
FROM PetTypes
WHERE PetTypeId NOT IN ( SELECT PetTypeId FROM Pets );
結果:
+-------------+-----------+ | PetTypeId | PetType | |-------------+-----------| | 4 | Rabbit | +-------------+-----------+
この場合、データベースにはペットタイプのRabbit
が含まれています 、しかし現在、ペットとしてのウサギはいない。
表現
提供される値は式のリストです。したがって、次のようなことができます:
SELECT
PetId,
PetName,
DOB
FROM Pets
WHERE PetId IN (1, 3, 2 + 3);
結果:
+---------+-----------+------------+ | PetId | PetName | DOB | |---------+-----------+------------| | 1 | Fluffy | 2020-11-20 | | 3 | Scratch | 2018-10-01 | | 5 | Tweet | 2020-11-28 | +---------+-----------+------------+