Oracle NOT EXISTS (日本語)

概要: このチュートリアルでは、Oracle の NOT EXISTS 演算子を使用して、あるデータセットを別のデータセットから差し引く方法を学びます。

Oracle NOT EXISTS 演算子の紹介

NOT EXISTSEXISTSNOT EXISTS演算子は、あるデータセットを別のデータセットから差し引くために、サブクエリーと一緒に使用することがよくあります。

NOT EXISTS 演算子を使用した次の文を考えてみましょう:

SELECT *FROM table_nameWHERE NOT EXISTS (subquery);

NOT EXISTS 演算子は、副問い合わせが行を返さない場合は真を返します。

NOT EXISTS 演算子は、副問い合わせがNULL値を持つ行を返した場合には、falseを返すことに注意してください。

Oracle NOT EXISTS の例

サンプル データベースの次の customersorders テーブルをご覧ください。

以下のステートメントは、注文のないすべての顧客を見つけます。

SELECT nameFROM customersWHERE NOT EXISTS ( SELECT NULL FROM orders WHERE orders.customer_id = customers.customer_id )ORDER BY name;

注文のない顧客をアーカイブするには、以下のステートメントを使用します。

CREATE TABLE customers_archive ASSELECT * FROM customersWHERE NOT EXISTS ( SELECT NULL FROM orders WHERE orders.customer_id = customers.customer_id );

2017年に注文のない顧客のクレジットリミットを更新するには、次のUPDATEのステートメントを使用します。

UPDATE customersSET credit_limit = 0WHERE NOT EXISTS( SELECT NULL FROM orders WHERE orders.customer_id = customers.customer_id AND EXTRACT( YEAR FROM order_date );

また、customersDELETE ステートメントを使用します:

Oracle NOT EXISTS vs. NOT IN

次のステートメントでは、IN演算子をサブクエリで使用しています:

SELECT*FROMtable_nameWHEREid IN(subquery);

subqueryが4つの値1、2、3、およびNULLを返すとします。

SELECT *FROM table_nameWHERE id = 1 OR id = 2 OR id = 3 OR id = NULL;

NULL値は何とも比較できないため、次の式は常にNULL値を返します。

id = NULL

従って、次の式は副問い合わせの結果セット内のいずれかの行がNULLの場合、NULL値を返します。

id NOT IN (subquery)

これに対して、NOT EXIST演算子は副問い合わせの行の存在のみを確認するため、NULLはNOT EXISTS演算子の結果には影響しません。

SELECT *FROM table_nameWHERE NOT EXISTS(subquery);

結論として、NOT EXISTSNOT INは、NULL値が含まれている場合には異なる動作をします。

このチュートリアルでは、OracleのNOT EXISTS演算子を使用して、あるデータセットを別のデータセットから差し引く方法を学びました。

  • Was this tutorial helpful?
  • YesNo

コメントを残す

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