SQLでは、等しくない演算子(!=
)2つの式の不等式を比較します。つまり、1つの式がないかどうかをテストします。 別の式に等しい。
いずれかまたは両方のオペランドがNULL
の場合 、NULL
返されます。
SQLには、演算子と等しくない別のものもあります(<>
)、これは同じことをします。どちらを使用するかは、DBMS、最も使いやすいDBMS、および使用する必要のあるコーディング規則が組織にあるかどうかによって異なります。
データベースに次のテーブルが含まれていると想像してください。これは、このページの例で使用する表です。
SELECT * FROM Owners;
結果:
+-----------+-------------+------------+----------------+-------------------+ | OwnerId | FirstName | LastName | Phone | Email | |-----------+-------------+------------+----------------+-------------------| | 1 | Homer | Connery | (308) 555-0100 | [email protected] | | 2 | Bart | Pitt | (231) 465-3497 | [email protected] | | 3 | Nancy | Simpson | (489) 591-0408 | NULL | | 4 | Boris | Trump | (349) 611-8908 | NULL | | 5 | Woody | Eastwood | (308) 555-0112 | [email protected] | | 6 | Burt | Tyson | (309) 565-0112 | [email protected] | +-----------+-------------+------------+----------------+-------------------+
OwnerId
を持たないすべての所有者のリストを返したい場合 3
の 、これを行うことができます:
SELECT *
FROM Owners
WHERE OwnerId != 3;
結果:
+-----------+-------------+------------+----------------+-------------------+ | OwnerId | FirstName | LastName | Phone | Email | |-----------+-------------+------------+----------------+-------------------| | 1 | Homer | Connery | (308) 555-0100 | [email protected] | | 2 | Bart | Pitt | (231) 465-3497 | [email protected] | | 4 | Boris | Trump | (349) 611-8908 | NULL | | 5 | Woody | Eastwood | (308) 555-0112 | [email protected] | | 6 | Burt | Tyson | (309) 565-0112 | [email protected] | +-----------+-------------+------------+----------------+-------------------+
このクエリでは、等しくない演算子(!=
)を使用しています )OwnerId
かどうかをテストします 列が3
と等しくありません 。クエリは、所有者番号3を除くすべての所有者を返します。
文字列値と比較するときは、文字列を引用符で囲みます。たとえば、名がHomerではないすべての所有者に関する情報を取得したい場合は、次のようにすることができます。
SELECT *
FROM Owners
WHERE FirstName != 'Homer';
結果:
+-----------+-------------+------------+----------------+-------------------+ | OwnerId | FirstName | LastName | Phone | Email | |-----------+-------------+------------+----------------+-------------------| | 2 | Bart | Pitt | (231) 465-3497 | [email protected] | | 3 | Nancy | Simpson | (489) 591-0408 | NULL | | 4 | Boris | Trump | (349) 611-8908 | NULL | | 5 | Woody | Eastwood | (308) 555-0112 | [email protected] | | 6 | Burt | Tyson | (309) 565-0112 | [email protected] | +-----------+-------------+------------+----------------+-------------------+
複数の条件がある場合は、複数の演算子を使用できます(同じ演算子でも異なる演算子でも)。
このように:
SELECT * FROM Owners
WHERE OwnerId != 1 AND OwnerId != 3;
結果:
+-----------+-------------+------------+----------------+-------------------+ | OwnerId | FirstName | LastName | Phone | Email | |-----------+-------------+------------+----------------+-------------------| | 2 | Bart | Pitt | (231) 465-3497 | [email protected] | | 4 | Boris | Trump | (349) 611-8908 | NULL | | 5 | Woody | Eastwood | (308) 555-0112 | [email protected] | | 6 | Burt | Tyson | (309) 565-0112 | [email protected] | +-----------+-------------+------------+----------------+-------------------+
さらに条件を使用し始めたら、最初に評価する条件を括弧で囲んでください。これを行わないと、意図しない順序で条件が評価されたために、予期しない結果が生じる可能性があります。
NOT
を使用する場合 not equal to演算子によって提供される条件を否定する演算子を使用すると、equals(=
)の結果が得られます。 )演算子:
SELECT *
FROM Owners
WHERE NOT FirstName != 'Homer';
結果:
+-----------+-------------+------------+----------------+-------------------+ | OwnerId | FirstName | LastName | Phone | Email | |-----------+-------------+------------+----------------+-------------------| | 1 | Homer | Connery | (308) 555-0100 | [email protected] | +-----------+-------------+------------+----------------+-------------------+
この場合、equals(=
)を使用する方がよいでしょう。 )演算子、このように:
SELECT *
FROM Owners
WHERE FirstName = 'Homer';
もちろん、これ自体はNOT
で無効にすることができます 演算子。これにより、等しくない(!=
と同じ結果が得られます) )演算子は私たちに与えます:
SELECT *
FROM Owners
WHERE NOT FirstName = 'Homer';
NULL値
元のサンプルテーブルにいくつかのNULL
が含まれていることに気付いたかもしれません。 Email
の値 列。
NULL
を含む列 価値がないことを意味します。これは0
とは異なります またはfalse
、または空の文字列ですら。
notequalto演算子を使用してNULL
と比較することはできません 。実際、これはDBMSとその構成によって異なる場合があります。しかし、今のところ、Email
を比較しようとするとどうなるか見てみましょう。 列からNULL
。
SELECT * FROM Owners
WHERE Email != NULL;
結果:
(0 rows affected)
NULL
以外をテストする方法 値はIS NOT NULL
を使用することです 。
したがって、上記のステートメントを次のように書き直す必要があります。
SELECT * FROM Owners
WHERE Email IS NOT NULL;
結果:
+-----------+-------------+------------+----------------+-------------------+ | OwnerId | FirstName | LastName | Phone | Email | |-----------+-------------+------------+----------------+-------------------| | 1 | Homer | Connery | (308) 555-0100 | [email protected] | | 2 | Bart | Pitt | (231) 465-3497 | [email protected] | | 5 | Woody | Eastwood | (308) 555-0112 | [email protected] | | 6 | Burt | Tyson | (309) 565-0112 | [email protected] | +-----------+-------------+------------+----------------+-------------------+
これで、NULL
ではない行のみが取得されます。 Email
で 列。
興味がある場合は、SQL Server ANSI_NULLS Explained
を参照してください。 NULL
の方法を変更する方法を確認する 値はSQLServerで処理されます。