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