java的exists_EXISTS 与 NOT EXISTS 的用法及返回结果

本文详细解析了SQL查询中EXISTS与NOT EXISTS子句的不同应用场景,包括它们如何用于关联主查询与子查询,以及如何筛选特定条件下的数据记录。

(1)SELECT * FROM `datatower-all`.TMP_DWD_POI t1

WHERE EXISTS (

SELECT 1 FROM `datatower-all`.DWD_POI t WHERE t.POI_GRP_PHYSICAL_ID='100111'

)

解析:当DWD_POI表中有POI_GRP_PHYSICAL_ID='100111'的记录时,返回TMP_DWD_POI表的所有记录;当DWD_POI表中没有POI_GRP_PHYSICAL_ID='100111'的记录时,则无记录返回。

(主查询和exists的子查询无关联)

(2)SELECT * FROM `datatower-all`.TMP_DWD_POI t1

WHERE NOT EXISTS (

SELECT 1 FROM `datatower-all`.DWD_POI t WHERE t.POI_GRP_PHYSICAL_ID='100111'

)

解析:当DWD_POI表中有POI_GRP_PHYSICAL_ID='100111'的记录时,则无记录返回;当DWD_POI表中没有POI_GRP_PHYSICAL_ID='100111'的记录时,返回TMP_DWD_POI表的所有记录。

(主查询和exists的子查询无关联)

(3)SELECT * FROM `datatower-all`.TMP_DWD_POI t1

WHERE EXISTS (

SELECT 1 FROM `datatower-all`.DWD_POI t WHERE t.SOURCE_ID = t1.SOURCE_ID AND t.SOURCE_SYS=t1.SOURCE_SYS

AND t.POI_GRP_PHYSICAL_ID='100111'

)

解析:当DWD_POI表中有t.SOURCE_ID = t1.SOURCE_ID AND t.SOURCE_SYS=t1.SOURCE_SYS AND t.POI_GRP_PHYSICAL_ID='100111'的记录时,返回TMP_DWD_POI表中与DWD_POI表中SOURCE_ID相同,SOURCE_SYS相同,POI_GRP_PHYSICAL_ID='100111'的记录,相当于返回TMP_DWD_POI表相对于NOT EXISTS后子查询的交集。

当DWD_POI表中没有t.SOURCE_ID = t1.SOURCE_ID AND t.SOURCE_SYS=t1.SOURCE_SYS AND t.POI_GRP_PHYSICAL_ID='100111'的记录时,则无记录返回。

(主查询和exists的子查询有关联)

(4)SELECT * FROM `datatower-all`.TMP_DWD_POI t1

WHERE NOT EXISTS (

SELECT 1 FROM `datatower-all`.DWD_POI t WHERE t.SOURCE_ID = t1.SOURCE_ID AND t.SOURCE_SYS=t1.SOURCE_SYS

AND t.POI_GRP_PHYSICAL_ID='100111'

)

解析:当DWD_POI表中有t.SOURCE_ID = t1.SOURCE_ID AND t.SOURCE_SYS=t1.SOURCE_SYSAND t.POI_GRP_PHYSICAL_ID='100111'的记录时,返回TMP_DWD_POI表中除去与NOT EXISTS后子查询相同记录后的记录,相当于返回TMP_DWD_POI表相对于NOT EXISTS后子查询的补集。

当DWD_POI表中没有t.SOURCE_ID = t1.SOURCE_ID AND t.SOURCE_SYS=t1.SOURCE_SYSAND t.POI_GRP_PHYSICAL_ID='100111'的记录时,返回TMP_DWD_POI表中所有记录。

(主查询和exists的子查询有关联)

判断主查询和exists的子查询是否有关联的方法:查看子查询的where条件中是否同时包含了子查询表的字段和主查询表的字段,若是,则说明进行了关联,若只有子查询表的字段,则说明未进行关联)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值