sql >> データベース >  >> RDS >> Database

初心者向けのSQLNotEqual To(!=)演算子

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


    1. PL/pgSQL関数のオプションの引数

    2. MySQLでのMAKE_SET()関数のしくみ

    3. foreach%dopar%+ RPostgreSQL

    4. MariaDBのストレージエンジンオプションの調査