概要: このチュートリアルでは、PostgreSQLのEXISTS
演算子を使用して、副問い合わせ内の行の存在をテストする方法を学習します。
PostgreSQL EXISTS演算子の紹介
EXISTS
演算子は、副問い合わせの中に行が存在するかどうかをテストするブール演算子です。
以下に EXISTS
演算子の構文を示します:
EXISTS (subquery)
EXISTS
は副問い合わせである引数を受け入れます。
サブクエリが少なくとも1つの行を返す場合、EXISTS
の結果はtrueとなります。
EXISTS
演算子は相関副問い合わせと一緒に使われることが多いです。
EXISTS
SELECT
句に表示される列は重要ではありません。
このため、一般的なコーディング規約では、EXISTS
を次のような形式で記述します。
サブクエリがNULLを返した場合、EXISTS
の結果はtrueになることに注意してください。
PostgreSQL EXISTSの例
サンプルデータベースの以下のcustomer
payment
のテーブルをデモに使用します。
A) 金額が11以上の支払いが1回以上ある顧客を検索します。
次のステートメントは、金額が11より大きいレンタル料を少なくとも1回支払ったことのある顧客を返します:
SELECT first_name, last_nameFROM customer cWHERE EXISTS (SELECT 1 FROM payment p WHERE p.customer_id = c.customer_id AND amount > 11 )ORDER BY first_name, last_name;
このクエリは次のような出力を返します。
この例では、customer
customer
payment
p.customer_id = c.customer_id
amount > 11
)
B) NOT EXISTSの例
NOT
EXISTS
NOT EXISTS
EXISTS
NOT EXISTS
はtrueを返すことを意味します。
次の例では、11以上の支払いをしていない顧客を返します。
SELECT first_name, last_nameFROM customer cWHERE NOT EXISTS (SELECT 1 FROM payment p WHERE p.customer_id = c.customer_id AND amount > 11 )ORDER BY first_name, last_name;
以下はその出力です。
C) EXISTSとNULL
サブクエリがNULL
EXISTS
はtrueを返します。 次の例を参照してください:
Code language: SQL (Structured Query Language) (sql)SELECTfirst_name,last_nameFROMcustomerWHEREEXISTS( SELECT NULL )ORDER BYfirst_name,last_name;
この例では、サブクエリが NULL
customer
テーブルのすべての行を返しました。
このチュートリアルでは、PostgreSQLのEXISTS
を使用して、サブクエリで行の存在をテストする方法を学習しました。
- このチュートリアルは役に立ちましたか?
- YesNo