概要: このチュートリアルでは、PostgreSQLのEXISTS演算子を使用して、副問い合わせ内の行の存在をテストする方法を学習します。
PostgreSQL EXISTS演算子の紹介
EXISTS 演算子は、副問い合わせの中に行が存在するかどうかをテストするブール演算子です。
以下に EXISTS 演算子の構文を示します:
EXISTS (subquery)
EXISTS は副問い合わせである引数を受け入れます。
サブクエリが少なくとも1つの行を返す場合、EXISTSの結果はtrueとなります。
EXISTS演算子は相関副問い合わせと一緒に使われることが多いです。
EXISTSSELECT句に表示される列は重要ではありません。
このため、一般的なコーディング規約では、EXISTSを次のような形式で記述します。
サブクエリがNULLを返した場合、EXISTSの結果はtrueになることに注意してください。
PostgreSQL EXISTSの例
サンプルデータベースの以下のcustomerpaymentのテーブルをデモに使用します。

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;
このクエリは次のような出力を返します。
この例では、customercustomerpaymentp.customer_id = c.customer_idamount > 11)
B) NOT EXISTSの例
NOTEXISTSNOT EXISTSEXISTSNOT 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
サブクエリがNULLEXISTSはtrueを返します。 次の例を参照してください:
Code language: SQL (Structured Query Language) (sql)SELECTfirst_name,last_nameFROMcustomerWHEREEXISTS( SELECT NULL )ORDER BYfirst_name,last_name;
この例では、サブクエリが NULLcustomer テーブルのすべての行を返しました。

このチュートリアルでは、PostgreSQLのEXISTSを使用して、サブクエリで行の存在をテストする方法を学習しました。
- このチュートリアルは役に立ちましたか?
- YesNo