MyBatis框架中的条件查询!关键字exists用法的详细解析

exists用法
- exists:
- 如果括号内子查询语句返回结果不为空,说明where条件成立,就会执行主SQL语句
- 如果括号内子查询语句返回结果为空,说明where条件不成立,就不会执行主SQL语句
- not exists: 与exists相反
- 如果括号内子查询语句结果为空,说明表示where条件成立,就会执行主SQL语句
- 如果括号内子查询语句结果不为空,说明表示where条件不成立,就不会执行主SQL语句
- exists与in的区别:
- in只能返回一个字段值
- exists强调是否返回结果集,不要求知道返回什么,exists允许返回多个字段
- exists的效率一般优于in:
- 使用exists,Oracle首先会检查主查询,然后运行子查询直到找到第一个匹配项
- 使用in子查询时,首先会执行子查询,并将获得的结果列表放在一个加了索引的临时表中
- exists的效率优于distinct:
- 当提交一对多表信息查询时,就可以避免在select中使用distinct
- 因为RDBMS核心模块将在子查询的条件一旦满足后,立即返回结果,所以自带去重.以下两组SQL语句等价:
SELECT distinct dept_no, dept_name from dept D, EMP E WHERE D.dept_no = E.dept_no;
SELECT dept_no, dept_name from dept D WHERE EXISTS (SELECT 1 from emp E WHERE E.dept_no = D.dept_no);
- exists适合外表的结果集小的情况
- in适合内外表都很大的情况
- exists与in的区别:
使用示例
- exists:
SELECT ID,NAME FROM A WHERE
EXISTS(SELECT * FROM B WHERE A.ID = B.AID)
- SQL语句分解:
SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=1)
--->SELECT * FROM B WHERE B.AID=1有值返回TRUE所以有数据
SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=2)
--->SELECT * FROM B WHERE B.AID=2有值返回TRUE所以有数据
SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=3)
--->SELECT * FROM B WHERE B.AID=3无值返回TRUE所以没有数据
- 上面SQL语句等价于:
SELECT id, name from A WHERE id in (select aid from B)
总结
- SQL中in, not in, exists, not exists的区别:
- in:
- 确定给定的值是否与子查询或者列表中的值匹配
- in关键字选择与列表中任意一个值匹配的行
- in关键字之后的项目必须用逗号隔开,并且括在括号中
- not in:
- 通过not in关键字引入的子查询也返回一列零值或更多值
- exists:
- 指定一个子查询,检测行的存在
- 相当于两个集合的交集
- exists后面可以是整句的查询语句 ,in后面只能是单列查询语句
- not exists:
- 相当于两个集合的差集
- exists和not exists返回的结果类型是Boolean:
- 如果子查询包含行:
- exists返回TRUE
- not exists返回FALSE
- 如果子查询包含行:
- in:
MyBatis框架中的条件查询!关键字exists用法的详细解析的更多相关文章
- 使用mybatis框架实现带条件查询-多条件(传入实体类)
在实际的项目开发中,使用mybatis框架查询的时候,不可能是只有一个条件的,大部分情况下是有多个条件的,那么多个条件应该怎样传入参数: 思考: 需求:根据用户姓名(模糊查询),和用户角色对用户表进 ...
- 使用mybatis框架实现带条件查询-单条件
之前我们写的查询sql都是没有带条件的,现在来实现一个新的需求,根据输入的字符串,模糊查询用户表中的信息 UserMapper.xml UserMapper.java 与jdbc的比较: 编写测试方法 ...
- 使用mybatis框架实现带条件查询-多条件(传入Map集合)
我们发现我们可以通过传入javaBean的方式实现我们的需求,但是就两个条件,思考:现在就给他传入一个实体类,对系统性能的开销是不是有点大了. 现在改用传入Map集合的方式: 奥!对了,在创建map集 ...
- SSM-MyBatis-13:Mybatis中多条件查询
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 实体类 public class Book { private Integer bookID; private ...
- 详解Java的MyBatis框架中SQL语句映射部分的编写
这篇文章主要介绍了Java的MyBatis框架中SQL语句映射部分的编写,文中分为resultMap和增删查改实现两个部分来讲解,需要的朋友可以参考下 1.resultMap SQL 映射XML 文件 ...
- Mybatis框架中实现双向一对多关系映射
学习过Hibernate框架的伙伴们很容易就能简单的配置各种映射关系(Hibernate框架的映射关系在我的blogs中也有详细的讲解),但是在Mybatis框架中我们又如何去实现 一对多的关系映射呢 ...
- django-drf框架中排序和查询组件
0910自我总结 django-drf框架中排序和查询组件 一查询相关 1.模糊查询 1.导入模块组件 from rest_framework.filters import SearchFilter ...
- mybatis框架中XxxxMaper.xml的文件
我们知道在mybatis框架中,config.xml中会关联到许多的XxxxMapper的xml文件,这些文件又对应着一个个的接口,来观察下这些xml文件 从以下这个文件为例子: <?xml v ...
- C# 将Access中时间段条件查询的数据添加到ListView中
C# 将Access中时间段条件查询的数据添加到ListView中 一.让ListView控件显示表头的方法 在窗体中添加ListView 空间,其属性中设置:View属性设置为:Detail,Col ...
随机推荐
- idea-创建web.xml模板
web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="htt ...
- DDD中实体与值对象是干什么的
实体值对象的含义 我们前面已经讲过领域的概念, 今天来讲讲实体, 实体是我们进行设计领域模型时的基础单元, 与之有关的是值对象, 接下来先梳理一下实体以及值对象的含义,然后讲讲他们俩的关系, 希望通过 ...
- Java,用户刷屏检测\相似字符串检测
背景 近期有几个业务方提出一需求,期望判断一个用户在短期内是否存在刷屏现象,出现后能对其做出限制,并上报. 刷屏定义:取出用户近期20条评论,如果有50%的评论是"相似"的,则认为 ...
- 巧用Reflections库实现包扫描
1.需求 需要扫描某个包中的某个接口的实现类的需求 2.maven 依赖引入 <dependency> <groupId>org.reflections</groupId ...
- Yolov3 的 OneFlow 实现
Yolov3 的 OneFlow 实现 1.简介 YOLO 系列的算法(经典的v1~v3),是单阶段目标检测网络的开山鼻祖,YOLO-You only look once,表明其单阶段的特征,正是由于 ...
- PCB的IPC标准是什么
PCB的IPC标准是什么 印刷电路研究所成立于1957年,有6家印刷电路板制造商.1977年,许多电子公司与工控机联合起来,以实现电子电路的互连和封装.1998年,IPC协会创建了一个"连接 ...
- Python API vs C++ API of TensorRT
Python API vs C++ API of TensorRT 本质上,C++ API和Python API应该在支持您的需求方面接近相同.pythonapi的主要优点是数据预处理和后处理都很容易 ...
- 单核性能强悍,Core i3 这次又要“默秒全”?
单核性能强悍,Core i3 这次又要"默秒全"? 在 Intel 历代酷睿处理器中,定位主流级的 Core i3 一直以超高性价比.低功耗.低发热的特点受到广大用户的青睐,在市场 ...
- Redis源码解析之跳跃表(三)
我们再来学习如何从跳跃表中查询数据,跳跃表本质上是一个链表,但它允许我们像数组一样定位某个索引区间内的节点,并且与数组不同的是,跳跃表允许我们将头节点L0层的前驱节点(即跳跃表分值最小的节点)zsl- ...
- 基于webpack5封装的cli工具packx
安装 用 npm / yarn 安装: $ npm install -D packx $ yarn add -D packx 特性 基于 webpack5 支持 less,sass 支持 spa/mp ...