概要: このチュートリアルでは、PostgreSQLのEXISTS演算子を使用して、副問い合わせ内の行の存在をテストする方法を学習します。

PostgreSQL EXISTS演算子の紹介

EXISTS 演算子は、副問い合わせの中に行が存在するかどうかをテストするブール演算子です。

以下に EXISTS 演算子の構文を示します:

EXISTS (subquery)

EXISTS は副問い合わせである引数を受け入れます。

サブクエリが少なくとも1つの行を返す場合、EXISTSの結果はtrueとなります。

EXISTS演算子は相関副問い合わせと一緒に使われることが多いです。

EXISTSSELECT句に表示される列は重要ではありません。

このため、一般的なコーディング規約では、EXISTSを次のような形式で記述します。

サブクエリがNULLを返した場合、EXISTSの結果はtrueになることに注意してください。

PostgreSQL EXISTSの例

サンプルデータベースの以下のcustomerpaymentのテーブルをデモに使用します。

customer and payment tables

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;

以下はその出力です。

PostgreSQL NOT EXISTSの例

C) EXISTSとNULL

サブクエリがNULLEXISTSはtrueを返します。 次の例を参照してください:

SELECTfirst_name,last_nameFROMcustomerWHEREEXISTS( SELECT NULL )ORDER BYfirst_name,last_name;
Code language: SQL (Structured Query Language) (sql)

この例では、サブクエリが NULLcustomer テーブルのすべての行を返しました。

PostgreSQL EXIST with NULL example

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

  • このチュートリアルは役に立ちましたか?
  • YesNo

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です