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

初心者向けのSQLEXISTS演算子

    SQLでは、EXISTS 演算子は、行の存在をテストするサブクエリを指定します。 TRUEを返します サブクエリが1つ以上の行を返すとき。

    サブクエリは、別のクエリ(または別のサブクエリ)内にネストされたクエリです

    この記事には、EXISTSの基本的な例がいくつか含まれています オペレーター。

    ソーステーブル

    このページの例では、次の表を使用しています。

    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)

    EXISTSを示す例を次に示します。 オペレーター。

    SELECT 
        pt.PetTypeId,
        pt.PetType
    FROM PetTypes pt
    WHERE EXISTS ( 
        SELECT p.PetTypeId 
        FROM Pets p 
        WHERE p.PetTypeId = pt.PetTypeId 
        );

    結果:

    +-------------+-----------+
    | PetTypeId   | PetType   |
    |-------------+-----------|
    | 1           | Bird      |
    | 2           | Cat       |
    | 3           | Dog       |
    +-------------+-----------+

    この例は、ペットホテルにペットの種類がいくつあるかを示しています。実際には4つのペットの種類がありますが、Petsで実際のペットと一致するのはそのうちの3つだけです。 テーブル。

    これにより、INを使用する次のクエリで得られる結果と同じ結果が得られます。 オペレーター。

    SELECT 
        PetTypeId,
        PetType
    FROM PetTypes
    WHERE PetTypeId IN ( SELECT PetTypeId FROM Pets );

    NOT EXISTSの使用

    NOTを追加できます 結果を否定し、ペットの種類の数を確認するための演算子 私たちのペットホテルで。

    SELECT 
        pt.PetTypeId,
        pt.PetType
    FROM PetTypes pt
    WHERE NOT EXISTS ( 
        SELECT p.PetTypeId 
        FROM Pets p 
        WHERE p.PetTypeId = pt.PetTypeId 
        );

    結果:

    +-------------+-----------+
    | PetTypeId   | PetType   |
    |-------------+-----------|
    | 4           | Rabbit    |
    +-------------+-----------+

    この場合、データベースにはペットタイプのRabbitが含まれています 、しかし現在、ペットとしてのウサギはいない。


    1. Linux用の12MySQL/MariaDBセキュリティのベストプラクティス

    2. Fedora14でMySQLリレーショナルデータベースを使用する

    3. ORA-01034:ORACLEは使用できませんORA-27101:共有メモリレルムが存在しません

    4. SQLServerレプリケーションのトラブルシューティング