SQL语句中exists/not exists的用法分析
摘自:http://blog.csdn.net/zengcong2013/article/details/45820639
今天用到exists,结果代码居然忘了怎么写了,这里分享下
1、Student:
Sno |
Sname |
Ssex |
Sage |
Sdept |
200215121 |
李勇 |
男 |
20 |
CS |
200215122 |
刘晨 |
女 |
19 |
CS |
200215123 |
王敏 |
女 |
18 |
MA |
200215124 |
张立 |
男 |
19 |
IS |
2、Course:
Cno |
Cname |
Cpno |
Ccredit |
1 |
数据库 |
5 |
4 |
2 |
数学 |
2 |
|
3 |
信息系统 |
1 |
4 |
4 |
操作系统 |
6 |
3 |
5 |
数据结构 |
7 |
4 |
6 |
数据处理 |
2 |
|
7 |
PASCAL语言 |
6 |
4 |
3、SC:
Sno |
Cno |
Credit |
200215121 |
1 |
92 |
200215121 |
2 |
85 |
200215121 |
3 |
88 |
200215122 |
2 |
90 |
200215122 |
3 |
80 |
例1:查询所有选修了1号课程的学生的姓名。
解法1:利用exists
首先取Student表中的一个元组,然后在SC表中依次找SC.Sno=该元组的Sno,并且对应的Cno='1',如果存在,则外层查询的where子句返回为真,则Student表中的该元组可以输出。然后依次遍历Student表中的其他元组。
举个例子:对于在学生表中学号等于2002151121这个元组,在SC表中第一条记录即符合条件,然后where 子句返回 true,所以该条元组可以输出。然后依次遍历。
select Sname
from Student
where exists
(
select *
from SC
where Sno = Student.Sno AND Cno='1'
);
解法2:利用连接查询
select Sname
from Student,SC
where Student.Sno=SC.Sno AND SC.Cno='1';
例2:查询没有选修1号课程的学生的姓名。
解:
select Sname
from Student
where not exists
(
select *
from SC
where Sno=Student.Sno AND Cno='1'
);
例3:查询选修了全部课程的学生姓名。
select Sname
from Student
where not exists
(
select *
from Course
where not exists
(
select *
from SC
where Sno=Student.Sno AND
Cno=Course.Cno
) );
查找语义:查询这样的学生,没有一门课程是他不选修的。
查找过程:
首先,选取Student表中的一个元组,然后在依次判断Course表中的每个元组是否可以输出,只要有一个课程可以输出,则最外层查询的where子句返回为false;而在判断某个课程是否可以输出时,则要利用第三层查询,利用当前的学号和当前的课程号,在SC表中查询,如果存在,则第二层查询where子句返回false。至此,每一门课程都不可以输出时,这个学号对应的元组才可以输出。表示这个学生选修了全部的课程。
例4:至少选修了学生200215122选修的全部课程的学生号码。
select distinct Sno
from SC SCX
where not exists
(
select *
from SC SCY
where SCY.Sno='2002151122' AND
not exists
(
select *
from SC SCZ
where SCZ.Sno=SCX.Sno AND
SCZ.Cno=SCY.Cno));
查询语义:不存在这样的课程y,学生200215122选修了y,而学生x没选。
查询过程:先在SCX表中选一条记录,比方说第一条,然后再看SCY表中,只有SCY表中全部不能输出,第一层查询的where子句才返回true,第一条记录就可以输出;所以就要一次查看SCY表中的每一个元组,前三个,因为学号首先不满足=200215122所以必然不能输出,第四个的话,就要看其AND后面的not exists返回什么值,而这又取决于第三层查询中是否存在满足学号等于SCX.Sno且课程号=SCY.Cno的元组,经查看,有 ,则返回false,所以第四个也不能输出,第五个类似,所以,第一层查询的not exists返回true。所以第一条记录可以输出。
转载于:https://www.cnblogs.com/HQ2017/p/6885808.html
SQL语句中exists/not exists的用法分析相关推荐
- Sql 语句中 IN 和 EXISTS
原文链接: (2条消息)Sql 语句中 IN 和 EXISTS 的区别及应用 - jcpp9527的博客 - CSDN博客 https://blog.csdn.net/wqc19920906/art ...
- Sql语句中between与in的用法详解
通常在写SQL语句中我们时不时就会用到between或者in,或者两者组合在一起,between的运算符用于 WHERE 表达式中,选取介于两个值之间的数据范围.BETWEEN 同AND 一起搭配使用 ...
- Sql语句中IN和exists的区别及应用
表展示 首先,查询中涉及到的两个表,一个user和一个order表,具体表的内容如下: user表: order表: in 确定给定的值是否与子查询或列表中的值相匹配.in在查询的时候,首先查询子查询 ...
- sql语句中any和all的用法
这两个都是用于子查询的 any 是任意一个 all 是所有 any表示有任何一个满足就返回true,all表示全部都满足才返回true 建议使用max和min更加直观 比如 select * from ...
- 03-映射文件的sql语句中 #{} 和 ${} 的区别以及实现模糊查询
映射文件的sql语句中 #{} 和 ${} 区别以及实现模糊查询 目录 sql 语句中的 #{} #{} 模糊查询错误用法 #{} 实现模糊查询 sql 语句中的 ${} ${} 实现模糊查询 #{} ...
- 【MyBatis笔记】03-映射文件的sql语句中 #{} 和 ${} 的区别以及实现模糊查询
映射文件的sql语句中 #{} 和 ${} 区别以及实现模糊查询 sql 语句中的 #{} #{} 模糊查询错误用法 #{} 实现模糊查询 sql 语句中的 ${} ${} 实现模糊查询 #{} 与 ...
- SQL语句中的数学函数
SQL语句中的数学函数 开发工具与关键技术:SQL Server 2014.SQL语句中的数学函数 作者:袁何恩 撰写时间:2019年7月16日 今天,我要和大家分享的技术是SQL语句中的数学函数. ...
- 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中的记录:满足条件 ...
- UNION,EXISTS,IN等在SQL语句中的灵活应用和场境的选择。
今天在QQ群里,有朋友问我这样的一个SQL Server中查询数据的问题, 表 A: num unit 001 a 002 b 003 c 表 B ...
最新文章
- ajax post的回调函数另一个方法,jQueryajax–post()方法 - 米扑博客
- SVG脚本编程简介(转)
- log4jdbc oracle,通过weblogic配置log4jdbc数据源,在项目中使用该数据源,输出sql
- IOS FRAMEWORK,动态库 等几个问题
- How to resolve error message Malformed URI literal syntax
- 早期访问中具有NetBeans的Oracle公共云Java服务
- 快准狠!Intel论文揭示自家车牌识别算法:LPRNet
- Sentinel热点Key降级上_分布式系统集群限流_线程数隔离_削峰填谷_流量控制_速率控制_服务熔断_服务降级---微服务升级_SpringCloud Alibaba工作笔记0042
- linux入门常识(三)
- 中兴e9000服务器,ZXCTN 9000-E设备系列_ZXCTN 9000-E系列中兴传输设备_中兴设备 - 诺深达华为光端机...
- signature=9b2caa13f2468eba05d2d57d9a88606d,【音响聚焦】顶级Hi-End音响发烧器材介绍(功放篇)...
- Java总结一:初窥线程
- 软件测试之验收测试三要点
- php公众号获取code,微信公众号获取code
- 【SAP Hana】SAP HANA协同开发代码管理应用入门
- 局域网:提高内网安全技术的十大策略(转)
- HTTP的get和post请求方法以及HTTP接口
- reactnative 京豆
- java实现本地图片转urljava中映射本地图片地址为url访问
- u盘什么品牌质量好?这几款可以试试
热门文章
- 分布式文件系统FastDFS如何做到高可用
- 解决scrollView上subView下移20point问题的一种方式
- 没有文件扩展“.vbs”的脚本引擎的解决方案
- springcloud与jdk版本问题
- c++ 写x64汇编 5参数_自己动手写操作系统 8086sos
- Unity 序列化的问题
- minio获取上传文件_Springboot集成Minio实现对象存储服务
- jtextarea可以让某一行右对齐吗_单元格对齐还在敲空格吗?几个简单小技巧要学会...
- 【渝粤题库】国家开放大学2021春2605经济法律基础题目
- 【5分钟 Paper】Dueling Network Architectures for Deep Reinforcement Learning