exists和no exists 在sql中的区别
之所以要说这个问题,是因为项目中用到了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,结果在整体执行就无返回值;一旦跟外面的查询关联上,就能准确查出数据。
而我遇到的问题正是这个。
经过分析,我认为一旦跟外层查询关联上,就会扫描外面查询的表。而没一旦二者不添加关联关系,只会根据not exists返回是否有结果集来判断,这也是为什么一旦子查询有数据,就查不到所有的数据了。
exists和no exists 在sql中的区别相关推荐
- java中exists是什么_JAVA:sql中exists的用法
exists:强调的是是否返回结果集,不要求知道返回什么,比如:selectnamefromstudentwheresex='m'andmarkexists(select1fromgradewhere ...
- 选择Data类型在Access与Sql中的区别
今天编写一个查询语句,其中需要比较日期,系统总是提示数据类型不匹配,经查才发现 在Access查询日期时,需加上#号做为标识 在SQL查询日期时,需加上'号做为标识 select * from sim ...
- SQL中IN与EXISTS的比较
为什么80%的码农都做不了架构师?>>> 由于要使用 in,后来在网上找找了,发现有如下文章,大家共享一下.一起进步啦. 使用in的话,如果存在索引,和使用 join 性能差别 ...
- Oralce 使用SQL中的exists 和not exists 用法详解
exists表示() 内子查询返回结果不为空,说明where条件成立就会执行sql语句:如果为空,表示where条件不成立,sql语句就不会执行. not exists和 exists相反,子查询语 ...
- sql中exists替换in的区别
在sql中使用exists替换in查询时要注意使用exists时一定要关联主查询和子查询的关联不然查询会得不到相应的结果如下语句: 语句一使用in查询: select realname from ...
- sql中 in , not in , exists , not exists效率分析
in和exists执行时,in是先执行子查询中的查询,然后再执行主查询.而exists查询它是先执行主查询,即外层表的查询,然后再执行子查询. exists 和 in 在执行时效率单从执行时间来说差不 ...
- sql中 in 、not in 、exists、not exists 用法和差别
exists (sql 返回结果集为真) not exists (sql 不返回结果集为真) 如下: 表A ID NAME 1 A1 2 A2 3 A3 表B ID AID NAME 1 ...
- SQL中的Exists 用法解释
exists的实例解析 现有两个表 a: b: 现有sql语句如下 select * from a where exists (select 1 from b where b.b_id = a.id) ...
- 关于SQL中not exists的双重否定的一些记录
作者:kuikui 关于SQL中not exists的双重否定的一些记录 室友在学习数据库时遇到了not exists双重否定的一些问题 在csdn上学习大佬们的理解办法 借此机会回顾一下 eg.表结 ...
- 你真的了解SQL中的EXISTS谓词吗?
EXISTS 谓词的用法 支撑 SQL 和关系数据库的基础理论主要有两个:一个是数学领域的集合论,另一个是作为现代逻辑学标准体系的谓词逻辑(predicate logic),准确地说是"一阶 ...
最新文章
- 突破电信3G宽带对网页浏览的上网限制
- 一起学设计模式 - 责任链模式
- 2018年08月19日发烧诸事记
- MySQL查询本年的数据的sql语句
- 字节跳动最新开源!java界面实现查询功能
- 几个以前项目中使用的函数 (转)
- AtCoder Grand Contest 021 D - Reversed LCS(区间dp)
- TiDB数据库备份恢复与数据迁移
- 深度学习知识抽取:属性词、品牌词、物品词
- PPT好帮手,模版不用愁-www.officeplus.cn
- 爱豆被“调包”?周杰伦:说好不哭
- OutMan——Foundation框架中的常用结构体、NSNumber类和NSValue类
- 协同控制中的共识算法概述
- ASAN和HWASAN原理解析
- python毕业设计项目源码选题(10)电影院售票系统毕业设计毕设作品开题报告开题答辩PPT
- linux启动zabbix服务,zabbix监控Linux系统服务的流程
- S7-200SMART PLC中书签和交叉引用的具体使用方法示例
- dell蓝牙图标消失,不能用
- 神武3服务器神武币交易中心,《神武3》电脑版:神武币使用方向攻略,神武币如何花在刀刃上...
- 通用寄存器介绍和段寄存器的介绍