本文整理自网络,侵删。
目录
- exists:
- exists 和in 的区别
- not exists详细介绍:
- 附案例分析
- 总结
之所以要说这个问题,是因为项目中用到了not exists,但两者写的语句只有一点差别,结果一个有问题了,一个没问题。具体问题下面详细说明,先来看看exists如何应用。
exists:
强调的是是否有返回集,不需知道具体返回的是什么,比如:
SELECT * FROM customer WHERE not EXISTS ( SELECT 0 FROM customer_goods WHERE customer_id = 1 )
只要exists引导的子句有结果集返回,这个条件就算成立。这个返回的字段始终是0,改成1,则始终返回的是1,所以exists不
在乎返回的是什么内容,只在乎是否有结果集返回。
exists 和in 的区别
这二者最大的区别,是使用in只能返回一个字段值
SELECT * FROM customer c WHERE c.id not in ( SELECT customer_id FROM customer_goods WHERE customer_id = 1 )
但exists允许返回多个字段。
not in 和not exists 分别为in 和exists的对立面。
exists(sql 返回结果集为真)
not exists(sql 不返回结果集为真)
not exists详细介绍:
表customer:
表customer_goods:
二者的干系:customer_goods.customer_id = customer.id
(1) 查询:
SELECT * FROM customer c WHERE NOT EXISTS ( SELECT * FROM customer_goods cg WHERE cg.customer_id =1 )
结果:
无返回结果
(2)查询:
SELECT * FROM customer c WHERE NOT EXISTS ( SELECT * FROM customer_goods cg WHERE c.id =1 )
结果:
(3)分析:
发现二者差别只是是否not exists字句查询的查询条件是否跟外面查询条件有关,如果not exists子查询只有自己本身的查询条件,这样只要子查询中有数据返回,就证明是false,结果在整体执行就无返回值;一旦跟外面的查询关联上,就能准确查出数据。
而我遇到的问题正是这个。
相关阅读 >>
更多相关阅读请进入《Sqlite》频道 >>
数据库系统概念 第6版
机械工业出版社
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。
转载请注明出处:木庄网络博客 » 详细聊聊sql中exists和notexists用法
相关推荐
评论
管理员已关闭评论功能...