- Oracle数据库是什么?
- Oracle 11g安装教程
- Oracle 12C安装
- Oracle数据库和实例
- 连接到Oracle数据库
- Oracle示例数据库
- 导入Oracle示例数据库
- Oracle基础入门
- Oracle数据定义
- Oracle数据类型
- Oracle修改数据
- Oracle查询数据
- Oracle连接表
- Oracle操作符
- Oracle约束
- Oracle高级部分
Oracle Not Exists运算符
在本教程中,您将学习如何使用Oracle NOT EXISTS
运算符从一个数据中减去另一组数据集。
Oracle NOT EXISTS运算符简介
NOT EXISTS
运算符与EXISTS运算符相反。我们经常在子查询中使用NOT EXISTS
运算符来从一个数据中减去另一组数据。
看一下使用NOT EXISTS
运算符的以下语句:
SELECT * FROM table_name WHERE NOT EXISTS (subquery);
如果子查询不返回任何行,则NOT EXISTS
运算符返回true
。 否则,它返回false
。
请注意,如果子查询返回任何具有
NULL
值的行,则NOT EXISTS
运算符将返回false
。
Oracle NOT EXISTS例子
请参阅示例数据库中的以下客户(customers
)和订单(orders
)表:
以下语句查找所有没有订单的客户:
SELECT name FROM customers WHERE NOT EXISTS ( SELECT NULL FROM orders WHERE orders.customer_id = customers.customer_id ) ORDER BY name;
执行上面查询语句,得到以下结果 -
要查询归档没有订单的客户,请使用以下语句:
CREATE TABLE customers_archive AS SELECT * FROM customers WHERE NOT EXISTS ( SELECT NULL FROM orders WHERE orders.customer_id = customers.customer_id );
执行上面查询语句后,再查询customers_archive
表中的数据,得到以下结果 -
要更新2017
年没有订单的客户的信用额度,请使用以下UPDATE语句:
UPDATE customers SET credit_limit = 0 WHERE NOT EXISTS( SELECT NULL FROM orders WHERE orders.customer_id = customers.customer_id AND EXTRACT(YEAR FROM order_date)='2017' );
要从customers
表中删除2016
年和2017
年没有订单的所有客户,请使用以下DELETE语句:
DELETE FROM customers WHERE NOT EXISTS( SELECT NULL FROM orders WHERE orders.customer_id = customers.customer_id AND EXTRACT(YEAR FROM order_date ) IN( 2016, ) );
Oracle NOT EXISTS与NOT IN
以下语句对子查询使用IN运算符:
SELECT * FROM table_name WHERE id IN(subquery);
假设子查询返回四个值:1
,2
,3
和NULL
。可以重写上面的整个查询,如下所示:
SELECT * FROM table_name WHERE id = 1 OR id = 2 OR id = 3 OR id = NULL;
下面的表达式总是返回一个NULL
值,因为NULL
值不能和任何东西比较。
id = NULL
因此,如果子查询的结果集中的任何行为NULL
,则以下表达式将返回NULL
值。
id NOT IN (subquery)
相比之下,NULL
不会影响NOT EXIST
运算符的结果,因为NOT EXISTS
运算符仅检查子查询中是否存在行:
SELECT * FROM table_name WHERE NOT EXISTS(subquery);
总而言之,当存在NULL
值时,NOT EXISTS
和NOT IN
的行为会有所不同。
在本教程中,您已学习如何使用Oracle NOT EXISTS
运算符从一个数据中减去另一组数据。
上一篇:Oracle Exists运算符
扫描二维码
程序员编程王