概要: このチュートリアルでは、Oracle の NOT EXISTS
演算子を使用して、あるデータセットを別のデータセットから差し引く方法を学びます。
Oracle NOT EXISTS 演算子の紹介
NOT EXISTS
EXISTS
NOT EXISTS
演算子は、あるデータセットを別のデータセットから差し引くために、サブクエリーと一緒に使用することがよくあります。
NOT EXISTS
演算子を使用した次の文を考えてみましょう:
SELECT *FROM table_nameWHERE NOT EXISTS (subquery);
NOT EXISTS
演算子は、副問い合わせが行を返さない場合は真を返します。
NOT EXISTS
演算子は、副問い合わせがNULL値を持つ行を返した場合には、falseを返すことに注意してください。
Oracle NOT EXISTS の例
サンプル データベースの次の customers
orders
テーブルをご覧ください。
以下のステートメントは、注文のないすべての顧客を見つけます。
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 );
また、customers
DELETE
ステートメントを使用します:
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 EXISTS
NOT IN
は、NULL値が含まれている場合には異なる動作をします。
このチュートリアルでは、OracleのNOT EXISTS
演算子を使用して、あるデータセットを別のデータセットから差し引く方法を学びました。
- Was this tutorial helpful?
- YesNo