SQL语句中EXISTS的使用详解及示例
EXISTS怎么用?
EXISTS和NOT EXISTS子句的返回值是一个BOOL值。 EXISTS内部有一个子查询语句(SELECT … FROM…), 我将其称为EXIST的内查询语句。其内查询语句返回一个结果集。EXISTS子句根据其内查询语句的结果集空或者非空,返回一个布尔值。
一种通俗的可以理解为:将外查询表的每一行,代入内查询作为检验,如果内查询返回的结果取非空值,则EXISTS子句返回TRUE,这一行行可作为外查询的结果行,否则不能作为结果。
EXISTS的几个查找练习
有三张表,分别是 学生表(S),课程表(C)和选课中间表(SC)
由表可知,zs是全选的学生,ls是选了一部分的学生,ww是全都没选的学生
问题1、查找课程全选的学生的姓名
也就是说要查zs这个学生
可以转换为:查询没有一门课没有被该生选择的学生的学号和姓名
select S,SNAME -- 在 S 表里选 S,SNAME
from S
where not exists -- 不存在(select * -- 课程from Cwhere not exists -- 没有(select * -- 被该生选择的课程from SCwhere SC.S=S.S and SC.C=C.C)) -- 相关查询,三个表进行连接
问题2、查找没全选的学生的姓名
也就是说要查ls和ww
可以转换为:查询存在课程没有被该生选择的学生的学号和姓名
select S,SNAME -- 在 S 表里选 S,SNAME
from S
where exists -- 存在(select * -- 课程from Cwhere not exists -- 没有(select * -- 被该生选择的课程from SCwhere SC.S=S.S and SC.C=C.C)) -- 相关查询,三个表进行连接
问题3、查找至少选了一个的学生的姓名
也就是说要查zs和ls
可以转换为:查询存在一门课被该生选择的学生的学号和姓名
select S,SNAME -- 在 S 表里选 S,SNAME
from S
where exists -- 存在(select * -- 课程from Cwhere exists -- 有(select * -- 被该生选择的课程from SCwhere SC.S=S.S and SC.C=C.C)) -- 相关查询,三个表进行连接
问题4、查找全没选的学生的姓名
也就是说要查ww
可以转换为:查询不存在一门课被该生选择的学生的学号和姓名
select S,SNAME -- 在 S 表里选 S,SNAME
from S
where not exists -- 不存在(select * -- 课程from Cwhere exists -- 有(select * -- 被该生选择的课程from SCwhere SC.S=S.S and SC.C=C.C)) -- 相关查询,三个表进行连接
总结
上述几个问题,其实解题思维是一样的,都是运用了两次 EXISTS 或 NOTEXISTS 混合来对查询进行约束。理解了这几个问题,再遇到相似的问题,就可以进行相应的转化来解决了。
SQL语句中EXISTS的使用详解及示例相关推荐
- sql语句中exists用法详解
文章目录 一.语法说明 exists: not exists: 二.常用示例说明 1.查询a表在b表中存在数据 2.查询a表在b表中不存在数据 3.查询时间最新记录 4.exists替代distinc ...
- 【MySQL】sql语句中exists和in有何区别?
1.概述 sql语句中exists和in有何区别? SQL语句优化有哪些方法? sq|语句中exists和in有何区别如下: exists是用循环( loop )的方式,由outer表的记录数决定循环 ...
- SQL语句中EXISTS的用法
记录:258 在业务开展中,会遇到类似需求. 需求1:UPDATE表TEST_TB01中的记录:满足条件:这些记录不在TEST_TB02中. 需求2:UPDATE表TEST_TB01中的记录:满足条件 ...
- 理解SQL语句中 Exists()
理解SQL语句中 Exists() exists对于主查询而言只有一个作用:返回ture或false,而其本身查询的結果集不具任何意义 因此在子查询的Select命令语句的字段行中通常使用通用字符*或 ...
- Ehcache 中ehcache.xml 配置详解和示例
EhCache 是一个纯Java的进程内缓存框架,具有快速.精干等特点,是Hibernate中默认的CacheProvider. Ehcache是一种广泛使用的开源Java分布式缓存.主要面向通用缓存 ...
- PowerDesigner15在win7-64位系统下对MySQL 进行反向工程以及建立物理模型产生SQL语句步骤图文傻瓜式详解...
1.安装PowerDesigner15.MySQL5.不详细讲解了.网上一大把.请各位亲参考去. 2.安MyODBC-standard-3.51.0.7-win.msi.mysql-connector ...
- Hive中row_number()函数用法详解及示例
目录 一.Hive 中row_number()函数介绍 二.使用示例 三.总结 四.附录 在Oracle中,我们经常会用到row_number() over(partition by clo1 ord ...
- 数据库SQL语句 SELECT LIKE like用法详解
转自:http://zvv.me/sql-server/447.html 在SQL结构化查询语言中,LIKE语句有着至关重要的作用. LIKE语句的语法格式是:select * from 表名 whe ...
- 判断sql语句中exists的用法
update demo_order a set order_name='橘子' where exists ( select 1 from demo_table b where a.order_id=b ...
最新文章
- 认清自己,愉快度过每一天
- 反编译插件jadclips
- 【JavaSE02】Java基本语法-练习
- 科大星云诗社动态20211214
- 【ARM】协处理器指令
- jquery --- DOM操作、表单元素的初始化
- Linux文件和目录权限:chmod、更改所有者和所属组:chown,umask命令,隐藏权限:lsattr/chattr...
- Twitter4j和Esper:在Twitter上跟踪用户情绪
- maven 之 setting.xm 的配置详解、说明
- SQL Server 2005数据库快照
- (29)FPGA摩尔型状态机设计(第6天)
- 如何快速搭建yum源和成功检测第三方软件
- VC通过函数索引调用DLL范例
- vue初学篇----过滤器(filters)
- 常用的无线充发射IC芯片
- MFC真的过时了吗?C++是否真的适合做GUI界面?
- WPF的TextBox抛出InvalidOperationException异常:Cannot close undo unit because no opened unit exists.
- 神经网络与傅立叶变换有关系吗?
- 一分钟让你知道黑白照片修复彩色软件有哪些?
- 高效 PyCharm 使用技巧