SQLでは、等しくない演算子(<> )2つの式の不等式を比較します。つまり、1つの式がないかどうかをテストします。 別の式に等しい。
いずれかまたは両方のオペランドがNULLの場合 、NULL 返されます。
SQLには、演算子と等しくない別のものもあります(!= )、これは同じことをします。どちらを使用するかは、DBMS、最も使いやすいDBMS、および使用する必要のあるコーディング規則が組織にあるかどうかによって異なります。
ソーステーブル
データベースに次のテーブルが含まれていると想像してください。これは、このページの例で使用する表です。
SELECT * FROM Pets; 結果:
+---------+-------------+-----------+-----------+------------+ | 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)
例
しないすべてのペットを取得したい場合 特定の所有者がいる場合、これを行うことができます:
SELECT *
FROM Pets
WHERE OwnerId <> 3; 結果:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 3 | 2 | 2 | Scratch | 2018-10-01 | | 5 | 1 | 1 | Tweet | 2020-11-28 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +---------+-------------+-----------+-----------+------------+
このクエリでは、等しくない演算子(<>)を使用しています )OwnerIdかどうかをテストします 列が3と等しくありません 。クエリは、所有者番号3を所有者として持たないすべてのペットを返します。
文字列
文字列値と比較するときは、文字列を引用符で囲みます。たとえば、Fluffyという名前ではないすべてのペットに関する情報を取得したい場合は、次のようにすることができます。
SELECT *
FROM Pets
WHERE PetName <> 'Fluffy'; 結果:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 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 | | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +---------+-------------+-----------+-----------+------------+
複数の条件
複数の条件がある場合は、複数の演算子を使用できます(同じ演算子でも異なる演算子でも)。
このように:
SELECT * FROM Pets
WHERE OwnerId <> 1 AND OwnerId <> 3; 結果:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 3 | 2 | 2 | Scratch | 2018-10-01 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +---------+-------------+-----------+-----------+------------+
条件を否定する
NOTを使用する場合 演算子が等しくない演算子によって提供される条件を否定すると、(=に等しい結果が得られます。 )演算子:
SELECT *
FROM Pets
WHERE NOT PetName <> 'Fluffy'; 結果:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | +---------+-------------+-----------+-----------+------------+
この場合、equal to(= )演算子、このように:
SELECT *
FROM Pets
WHERE PetName = 'Fluffy';
もちろん、これ自体はNOTで無効にすることができます 演算子。これにより、(<>に等しい)と同じ結果が得られます。 )演算子は私たちに与えます:
SELECT *
FROM Pets
WHERE NOT PetName = 'Fluffy'; NULL値
元のサンプルテーブルにいくつかのNULLが含まれていることに気付いたかもしれません。 DOB列の値。
NULLを含む列 価値がないことを意味します。これは0とは異なります またはfalse 、または空の文字列ですら。
notequalto演算子を使用してNULLと比較することはできません 。実際、これはDBMSとその構成によって異なる場合があります。しかし今のところ、DOB列をNULLと比較しようとするとどうなるか見てみましょう。 。
SELECT * FROM Pets
WHERE DOB <> NULL; 結果:
(0 rows affected)
NULL以外をテストする方法 値はIS NOT NULLを使用することです 。
したがって、上記のステートメントを次のように書き直す必要があります。
SELECT * FROM Pets
WHERE DOB IS NOT NULL; 結果:
+---------+-------------+-----------+-----------+------------+ | 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 | +---------+-------------+-----------+-----------+------------+
これで、NULLではない行のみが取得されます。 DOBで 列。
興味がある場合は、SQL Server ANSI_NULLS Explainedを参照してください。 NULLの方法を変更する方法を確認する 値はSQLServerで処理されます。