Oracle信用额度维护,Oracle Not Exists运算符

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

Oracle NOT EXISTS运算符简介

NOT 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)表:

2d5a995586f716bf6db03a7663c1f0f2.png

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

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

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

a75f03d6a654186cdc6bf7ae6d01860b.png

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

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

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

21680bc3c3ff0beba77a1e7f0e557188.png

要更新2017年没有订单的客户的信用额度,请使用以下语句:

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 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

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

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运算符从一个数据中减去另一组数据。

¥ 我要打赏   纠错/补充 收藏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值