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で処理されます。