EXISTS 的子查询 不返回具体的数据,只返回所查询数据的行数。所以一般EXISTS后面的查询通常都用 * 表示,给出具体的列名没有实际意义

若内层的查询结果为非空,则外层的 WHERE语句 子句返回真值,否则返回假值

【例1】 查询所有选修1号课程的学生姓名

SELECT sname

FROM Student

WHERE EXISTS

(SELECT *

FROM SC

WHERE sno = Student.sno AND cno = '1')

它的执行顺序如下:

1、从Student表中取出一个元组

2、若在 SC 表中  存在sno的值等于 Student.sno 且 cno= '1'  ,则能查到一行数据 ,where返回的值为真。

意味着 此条数据符合筛选要求,放入结果集;

3、取下一个元组 重复这一过程 进行数据的判断,直到把Student表中的所有元组检查完毕。最后把所有符合要求的数据返回

NOT EXISTS 的子查询 ,若内层的查询结果为非空,则外层的 WHERE语句 子句返回假值,否则返回真值

【例2】 查询没有选修1号课程的学生姓名

SELECT sname

FROM Student

WHERE NOT EXISTS

(SELECT *

FROM SC

WHERE sno = Student.sno AND cno = '1')

【例3】查询选修全部课程的学生的姓名

SQL中不存在全称量词(for all),但是可以把带有全称量词的谓语转化为等价的带有存在量词的谓语

查询选修全部课程的学生的姓名     可以理解为   没有一门课程是他不选修的

SELECT sname

FROM Student

WHERE NOT EXISTS

(SELECT *

FROM Course

WHERE NOT EXISTS

(SELECT *

FROM SC

WHERE sno = Student.sno AND cno = Course.cno));

执行的顺序:

1、从Student表中取出一个元组

2、把这个元组放在后面的子查询进行判断

若这个学生选择了全部的课程,则对于Course中的任意一条数据,在第二个NOT EXISTS子查询中,

查询结果都非空,

NOT EXISTS

(SELECT *

FROM SC

WHERE sno = Student.sno AND cno = Course.cno);

则返回值为假

SELECT *

FROM Course

WHERE NOT EXISTS

(SELECT *

FROM SC

WHERE sno = Student.sno AND cno = Course.cno);

查询结果返回值为真,则此条数据满足要求。此条数据保存到结果集

若这个学生没有选择了全部的课程,则对于Course中的任意一条数据,在第二个NOT EXISTS子查询中,

至少存在一条查询结果查询不到,

NOT EXISTS

(SELECT *

FROM SC

WHERE sno = Student.sno AND cno = Course.cno);

则返回值为真

SELECT *

FROM Course

WHERE NOT EXISTS

(SELECT *

FROM SC

WHERE sno = Student.sno AND cno = Course.cno);

查询结果返回值为假,则此条数据不满足要求。丢掉

SQL 查询中exists用法相关推荐

  1. sql语句中exists用法详解

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

  2. SQL语句中EXISTS的用法

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

  3. 相关子查询中exists后select 加数字的理解

      查看文章     相关子查询中exists后select 加数字的理解 2010-07-23 17:16 前提:两个基础表 SQL> select * from courses; COURS ...

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

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

  5. SQL查询 — 自连接的用法

    SQL查询 - 自连接的用法 要点 应用样例 1. 可重排列,排列,组合 2. 查找和应用局部不一致的列 3. 删除重复行 4. 排序 注 要点 自连接经常和非等值连接结合起来使用. 自连接和GROU ...

  6. 理解SQL语句中 Exists()

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

  7. oracle查数据存入数组,如何在SQL查询中使用Oracle关联数组

    ODP.Net公开了将关联数组作为参数从C#传递到Oracle存储过程的能力.除非您尝试在sql查询中使用该关联数组中包含的数据,否则它是一个很好的功能. 原因是它需要上下文切换 – SQL语句需要S ...

  8. SQL查询中having和where的异同点

    SQL查询中having与where 的异同点 在sql查询中, having与where类似,可以筛选数据,where后的表达式怎么写,having后就怎么写. 1. where针对表中的列发挥作用 ...

  9. 总结一下SQL语句中引号(')、quotedstr()、('')、format()在SQL语句中的用法

    总结一下SQL语句中引号(').quotedstr().('').format()在SQL语句中的用法以 及SQL语句中日期格式的表示(#).('') 在Delphi中进行字符变量连接相加时单引号用( ...

最新文章

  1. Mybatis入门程序增删改查操作
  2. Java面向对象(19)--抽象类与抽象方法abstract
  3. 【编译原理】学习LUA
  4. Error running ‘xxx‘: Command line is too long. Shorten command line for xxx or also for Spring Boot
  5. 鲲鹏性能优化十板斧(三)——网络子系统性能调优
  6. JavaScript:异常处理
  7. 实战-Android开机时间优化
  8. 设计模式常用的七大原则之③【依赖倒转】原则
  9. Android App的设计架构:MVC,MVP,MVVM与架构经验谈
  10. HTML、CSS面试题
  11. LEAP模型能源与碳排放模型
  12. 智慧农贸收银系统有什么功能
  13. bootloader的两种启动模式
  14. java实现商品sku_jquery实现商品sku多属性选择功能(商品详情页)
  15. html5 移动端 开发工具,H5推荐:最好用的五大移动应用开发工具
  16. java 日期 第几周-java 获取给定日期属于当年第几周
  17. Android开发-UI开发
  18. 计算机键盘被锁怎么解,电脑键盘锁了怎么解锁 电脑键盘解锁方法【详解】
  19. Low Latency HLS的实现优化
  20. ASP.NET防注入

热门文章

  1. SortExpression的用法问题
  2. ​面试中如何回答【你有offer了嘛】问题?
  3. ubuntu16.04下安装QQ教程
  4. WPF 控件专题 TreeView控件详解
  5. MYSQL优化及参数解释
  6. IBatis——初步总结
  7. 网站的域名一般如何选择
  8. C++使用事件信号SetEventt和ResetEvent实现线程同步
  9. DOS版环球经典游戏全集
  10. No database selected 的解决方法