SQL 查询中exists用法
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用法相关推荐
- sql语句中exists用法详解
文章目录 一.语法说明 exists: not exists: 二.常用示例说明 1.查询a表在b表中存在数据 2.查询a表在b表中不存在数据 3.查询时间最新记录 4.exists替代distinc ...
- SQL语句中EXISTS的用法
记录:258 在业务开展中,会遇到类似需求. 需求1:UPDATE表TEST_TB01中的记录:满足条件:这些记录不在TEST_TB02中. 需求2:UPDATE表TEST_TB01中的记录:满足条件 ...
- 相关子查询中exists后select 加数字的理解
查看文章 相关子查询中exists后select 加数字的理解 2010-07-23 17:16 前提:两个基础表 SQL> select * from courses; COURS ...
- 【MySQL】sql语句中exists和in有何区别?
1.概述 sql语句中exists和in有何区别? SQL语句优化有哪些方法? sq|语句中exists和in有何区别如下: exists是用循环( loop )的方式,由outer表的记录数决定循环 ...
- SQL查询 — 自连接的用法
SQL查询 - 自连接的用法 要点 应用样例 1. 可重排列,排列,组合 2. 查找和应用局部不一致的列 3. 删除重复行 4. 排序 注 要点 自连接经常和非等值连接结合起来使用. 自连接和GROU ...
- 理解SQL语句中 Exists()
理解SQL语句中 Exists() exists对于主查询而言只有一个作用:返回ture或false,而其本身查询的結果集不具任何意义 因此在子查询的Select命令语句的字段行中通常使用通用字符*或 ...
- oracle查数据存入数组,如何在SQL查询中使用Oracle关联数组
ODP.Net公开了将关联数组作为参数从C#传递到Oracle存储过程的能力.除非您尝试在sql查询中使用该关联数组中包含的数据,否则它是一个很好的功能. 原因是它需要上下文切换 – SQL语句需要S ...
- SQL查询中having和where的异同点
SQL查询中having与where 的异同点 在sql查询中, having与where类似,可以筛选数据,where后的表达式怎么写,having后就怎么写. 1. where针对表中的列发挥作用 ...
- 总结一下SQL语句中引号(')、quotedstr()、('')、format()在SQL语句中的用法
总结一下SQL语句中引号(').quotedstr().('').format()在SQL语句中的用法以 及SQL语句中日期格式的表示(#).('') 在Delphi中进行字符变量连接相加时单引号用( ...
最新文章
- Mybatis入门程序增删改查操作
- Java面向对象(19)--抽象类与抽象方法abstract
- 【编译原理】学习LUA
- Error running ‘xxx‘: Command line is too long. Shorten command line for xxx or also for Spring Boot
- 鲲鹏性能优化十板斧(三)——网络子系统性能调优
- JavaScript:异常处理
- 实战-Android开机时间优化
- 设计模式常用的七大原则之③【依赖倒转】原则
- Android App的设计架构:MVC,MVP,MVVM与架构经验谈
- HTML、CSS面试题
- LEAP模型能源与碳排放模型
- 智慧农贸收银系统有什么功能
- bootloader的两种启动模式
- java实现商品sku_jquery实现商品sku多属性选择功能(商品详情页)
- html5 移动端 开发工具,H5推荐:最好用的五大移动应用开发工具
- java 日期 第几周-java 获取给定日期属于当年第几周
- Android开发-UI开发
- 计算机键盘被锁怎么解,电脑键盘锁了怎么解锁 电脑键盘解锁方法【详解】
- Low Latency HLS的实现优化
- ASP.NET防注入