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

SQLite EXISTS

    概要 :このチュートリアルでは、SQLite EXISTSの使用方法を学習します サブクエリによって返される行の存在をテストする演算子。

    SQLite EXISTSの紹介 オペレーター

    EXISTS 演算子は、サブクエリが行を返すかどうかをチェックする論理演算子です。

    EXISTSの基本的な構文は次のとおりです。 演算子:

    EXISTS(subquery)
    Code language: SQL (Structured Query Language) (sql)

    この構文では、サブクエリはSELECTです。 0個以上の行を返すステートメント。

    サブクエリが1つ以上の行を返す場合、EXISTS 演算子はtrueを返します。それ以外の場合、EXISTS 演算子はfalseまたはNULLを返します 。

    サブクエリがNULLを含む1行を返す場合は注意してください 、EXISTSの結果 結果セットにはNULLの行が1つ含まれているため、演算子は引き続きtrueです。

    EXISTSを無効にするには 演算子の場合、NOT EXISTSを使用します 次のように演算子:

    NOT EXISTS (subquery)Code language: SQL (Structured Query Language) (sql)

    NOT EXISTS サブクエリが行を返さない場合、演算子はtrueを返します。

    SQLite EXISTS 演算子の例

    次のCustomersを参照してください およびInvoices サンプルデータベースのテーブル:

    次のステートメントは、請求書を持っている顧客を見つけます:

    SELECT
        CustomerId,
        FirstName,
        LastName,
        Company
    FROM
        Customers c
    WHERE
        EXISTS (
            SELECT 
                1 
            FROM 
                Invoices
            WHERE 
                CustomerId = c.CustomerId
        )
    ORDER BY
        FirstName,
        LastName; 
    Code language: SQL (Structured Query Language) (sql)

    次の図は、部分的な結果セットを示しています。

    この例では、顧客ごとにEXISTS オペレーターは、顧客IDがInvoicesに存在するかどうかを確認します テーブル。

    • 「はい」の場合、サブクエリは値1の1つの行を返し、EXISTSが発生します。 演算子はtrueと評価されます。したがって、クエリには結果セットにcurstomerが含まれます。
    • 顧客IDがInvoicesに存在しない場合 テーブルの場合、サブクエリはEXISTSの原因となる行を返しません。 falseと評価する演算子。したがって、クエリには結果セットに顧客が含まれません。

    INを使用できることに注意してください EXISTSの代わりに演算子 この場合、同じ結果を達成するための演算子:

    SELECT
       CustomerId, 
       FirstName, 
       LastName, 
       Company
    FROM
       Customers c
    WHERE
       CustomerId IN (
          SELECT
             CustomerId
          FROM
             Invoices
       )
    ORDER BY
       FirstName, 
       LastName;Code language: SQL (Structured Query Language) (sql)

    サブクエリが最初の行を返すと、EXISTS オペレーターは結果を判別できるため、検索を停止します。一方、IN オペレーターは、サブクエリによって返されたすべての行をスキャンして、結果を判別する必要があります。

    一般的に、EXISTS 演算子はINよりも高速です サブクエリによって返される結果セットが大きい場合は演算子。対照的に、IN 演算子はEXISTSよりも高速です サブクエリによって返される結果セットが小さい場合は演算子。

    SQLiteNOT EXISTS 演算子の例

    サンプルデータベースの次のArtistsandAlbumsテーブルを参照してください。

    このクエリは、アルバムテーブルにアルバムがないすべてのアーティストを検索します:

    SELECT
       *
    FROM
       Artists a
    WHERE
       NOT EXISTS(
          SELECT
             1
          FROM
             Albums
          WHERE
             ArtistId = a.ArtistId
       )
    ORDER BY Name;Code language: SQL (Structured Query Language) (sql)

    部分的な出力は次のとおりです。

    このチュートリアルでは、SQLiteのEXISTSの使用方法を学びました。 サブクエリによって返される行の存在をテストする演算子。


    1. 高可用性のためにMySQL用のPerconaサーバーをデプロイする方法

    2. Microsoft Access 2010、2013、2016、および2019チュートリアル

    3. GoogleBigQueryをIRIVoracityソフトウェアに接続する

    4. 制約違反に関するユーザーフレンドリーなエラーメッセージを表示する方法はありますか