概要 :このチュートリアルでは、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
の使用方法を学びました。 サブクエリによって返される行の存在をテストする演算子。