数据库教程-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

Oracle NOT EXISTS例子

请参阅示例数据库中的以下客户(customers)和订单(orders)表:

Oracle Not Exists运算符

以下语句查找所有没有订单的客户:

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

执行上面查询语句,得到以下结果 –

Oracle Not Exists运算符

要查询归档没有订单的客户,请使用以下语句:

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

执行上面查询语句后,再查询customers_archive表中的数据,得到以下结果 –

Oracle Not Exists运算符

要更新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,                 2017             )     ); 

Oracle NOT EXISTS与NOT IN

以下语句对子查询使用IN运算符:

SELECT  * FROM     table_name WHERE     id IN(subquery); 

假设子查询返回四个值:1,2,3NULL。可以重写上面的整个查询,如下所示:

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 EXISTSNOT IN的行为会有所不同。

在本教程中,您已学习如何使用Oracle NOT EXISTS运算符从一个数据中减去另一组数据。

  

从零到一,创造未来!跨零综合IT问题解决服务站,欢迎你的到来。Oracle数据库教程 只为你绽放。

本文固定链接: http://kua0.com/2019/01/16/数据库教程-oracle-not-exists运算符/

为您推荐

发表评论

电子邮件地址不会被公开。 必填项已用*标注