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的使用详解及示例相关推荐

  1. sql语句中exists用法详解

    文章目录 一.语法说明 exists: not exists: 二.常用示例说明 1.查询a表在b表中存在数据 2.查询a表在b表中不存在数据 3.查询时间最新记录 4.exists替代distinc ...

  2. 【MySQL】sql语句中exists和in有何区别?

    1.概述 sql语句中exists和in有何区别? SQL语句优化有哪些方法? sq|语句中exists和in有何区别如下: exists是用循环( loop )的方式,由outer表的记录数决定循环 ...

  3. SQL语句中EXISTS的用法

    记录:258 在业务开展中,会遇到类似需求. 需求1:UPDATE表TEST_TB01中的记录:满足条件:这些记录不在TEST_TB02中. 需求2:UPDATE表TEST_TB01中的记录:满足条件 ...

  4. 理解SQL语句中 Exists()

    理解SQL语句中 Exists() exists对于主查询而言只有一个作用:返回ture或false,而其本身查询的結果集不具任何意义 因此在子查询的Select命令语句的字段行中通常使用通用字符*或 ...

  5. Ehcache 中ehcache.xml 配置详解和示例

    EhCache 是一个纯Java的进程内缓存框架,具有快速.精干等特点,是Hibernate中默认的CacheProvider. Ehcache是一种广泛使用的开源Java分布式缓存.主要面向通用缓存 ...

  6. PowerDesigner15在win7-64位系统下对MySQL 进行反向工程以及建立物理模型产生SQL语句步骤图文傻瓜式详解...

    1.安装PowerDesigner15.MySQL5.不详细讲解了.网上一大把.请各位亲参考去. 2.安MyODBC-standard-3.51.0.7-win.msi.mysql-connector ...

  7. Hive中row_number()函数用法详解及示例

    目录 一.Hive 中row_number()函数介绍 二.使用示例 三.总结 四.附录 在Oracle中,我们经常会用到row_number() over(partition by clo1 ord ...

  8. 数据库SQL语句 SELECT LIKE like用法详解

    转自:http://zvv.me/sql-server/447.html 在SQL结构化查询语言中,LIKE语句有着至关重要的作用. LIKE语句的语法格式是:select * from 表名 whe ...

  9. 判断sql语句中exists的用法

    update demo_order a set order_name='橘子' where exists ( select 1 from demo_table b where a.order_id=b ...

最新文章

  1. 认清自己,愉快度过每一天
  2. 反编译插件jadclips
  3. 【JavaSE02】Java基本语法-练习
  4. 科大星云诗社动态20211214
  5. 【ARM】协处理器指令
  6. jquery --- DOM操作、表单元素的初始化
  7. Linux文件和目录权限:chmod、更改所有者和所属组:chown,umask命令,隐藏权限:lsattr/chattr...
  8. Twitter4j和Esper:在Twitter上跟踪用户情绪
  9. maven 之 setting.xm 的配置详解、说明
  10. SQL Server 2005数据库快照
  11. (29)FPGA摩尔型状态机设计(第6天)
  12. 如何快速搭建yum源和成功检测第三方软件
  13. VC通过函数索引调用DLL范例
  14. vue初学篇----过滤器(filters)
  15. 常用的无线充发射IC芯片
  16. MFC真的过时了吗?C++是否真的适合做GUI界面?
  17. WPF的TextBox抛出InvalidOperationException异常:Cannot close undo unit because no opened unit exists.
  18. 神经网络与傅立叶变换有关系吗?
  19. 一分钟让你知道黑白照片修复彩色软件有哪些?
  20. 高效 PyCharm 使用技巧

热门文章

  1. StreamInPut/Output
  2. CentOS Netcat 用法
  3. 关于python-docx自动生成word文档的总结
  4. Oracle Reports 6i培训教程 - 百度文库
  5. 前端学习日志-4-js
  6. android WebView
  7. 科技人文丨爱上陌生人的36个问题
  8. 集成学习算法的思想、通过集成学习提高整体泛化能力的前提条件、如何得到独立的分类器Bagging、Boosting、Stacking算法
  9. 网络协议—应用层的HTTP协议
  10. plsql无法连接oracle,报错:ORA-12514