2021-11-04数据库中关于两层套用 not exists实现全称量词查询
在刚开始学习数据库时会遇到如何理解两层嵌套 not exists 实现全称量词的查询的理解。
例如:
Student : Sno (学号) Sname(姓名) Ssex(性别) Sage(年龄) Sdept(系)
Course :Cno(课程号) Cname(课程名) Cpno(先行课) Ccredit(学分)
SC :Sno(学号) Cno(课程号) Grade(成绩)
查询选修了全部课程的学生姓名:
Select Sname
From Student
Where not exists(select *From Course Where not exists(select *From SCWhere Sno =Student.Sno AND Cno = Course.Cno));
我们首先从Student中拿出来一个学生,进入Where的第一层 not exists 中:
作用:可以在Course中查到对应课程的课程号。将课程号循环传递给第二层 not exists 中。
进入第二层 not exists 循环
作用:先是将第一层查询的课程号 和 Student的姓名对应起来,然后看能否在SC中查询到
以上是废话:
重点来了:第一层Course中的每门课程都能在 第二层SC中查询到则
where not exists返回0,(not exists语句查询结果为空,返回真直;查询不为空,返回假值)。
第二层返回是0,则第一层由于第二层返回为空及第一层中的查询结果为0(空),所以上图中的Where not exists 返回1。意思是这位同学所有课程已修。
例如 : 拿出Student中的张三,此时查询语句运行到:
From Student
查询语句进入循环:
Where not exists
(select *
From Course
这是已经查到课程号 1 ,继续查询
Where not exists
(select *
From SC
Where Sno =Student.Sno AND Cno = Course.Cno)
这个时候张三 和 课程号 1 联系起来,在SC中查询。如果查到课程 1 返回 0 给上一层。
然后查询课程号 2 如此往复。直到所有课程都返回为 0 则第一层返回为1 。这位同学的所有课程都
修读完成。否则如果第二层循环有一个没有查询到在 not exists作用下返回 1 ,导致第一层返回
0;则这位同学有课程没有修读完成。
以上就是整个过程啦啦啦啦啦啦
2021-11-04数据库中关于两层套用 not exists实现全称量词查询相关推荐
- 批量插入数据库语句java_java相关:MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码)...
java相关:MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码) 发布于 2020-7-22| 复制链接 本文通过实例代码给大家分享了MyBatis批量插入数据到Oracle数据库 ...
- 如何判断数据库中的两个表是否相同(相等)?比较数据库中的两个表是否完全相同,包括字段和每条记录
如何判断数据库中的两个表是否相同(相等)?比较数据库中的两个表是否完全相同,包括字段和每条记录 目录
- 如何在JAVA编程语言程序开发中更好的利用数据库中2两张表?
数据库中2两张表 一张user表,一张pay表 department的外键在user表中做主键 则:用eclipse的自动翻转工具生成的配置文件如下 <?xml version="1. ...
- mysql gps数据查询_Mysql数据库中计算两GPS坐标的距离
Mysql数据库中计算两GPS坐标的距离有两种方式: 1.直接使用SQL语句:#lat为纬度, lng为经度, 一定不要弄错 declare @lng1 float; declare @lat1 fl ...
- Mybatis中mapper文件中的两层循环
导言 使用mapper.xml文件来存储和执行sql语句是Mybatis框架中重要的应用.在mapper.xml文件中对List数据的循环遍历较为普遍和常用,而两层或多层循环是大家不常用的.下面简单介 ...
- 详解PostgreSQL数据库中的两阶段锁
点击上方"蓝字" 关注我们,享更多干货! 数据库中的对象是共享的,假如不同的用户同时修改某个对象,就会出现数据错乱,从而破坏数据库的数据一致性,违反事务的隔离性原则. 为了满足隔离 ...
- 数据库三级模式两层映射
为什么会有三级模式?这里的话先解释一些这个东西,ANSI为了规范我们对数据库的使用,ANSI的数据库管理系统研究小组于1978年提出了标准化的建议,将数据库结构分为3级:面向用户或应用程序员的用户级. ...
- mysql查询最新插入的一条_我刚数据库中插入一条记录,紧接着再去查询却查不到?...
向数据库 中奖记录表中 添加一条中奖 记录,马上调用方法查询这条记录, 查询不到! 我打开数据库查看 数据是插入成功的. 开发语言是用java, 框架 hibernate! 插入数据,和查询数据代码如 ...
- python将数据存入mysql数据库中_python3 两种方法将数据存入mysql数据库
方法一:(数据量小的时候推荐使用这种) 第一步:pip install mysqlclient 这里我没有报错 也许你可能会报错Read timed out 此时不要慌,这是因为你的网络问题,你使 ...
最新文章
- 一大清早,我就被编辑赶出了办公室……
- Python3可变字符串代码实现
- UART_RECV详细设计方案
- 字符定长文件Linux怎么生成,Linux中的more命令-逐页显示长文本文件
- 8.8 正睿暑期集训营 Day5
- android 字符串反转,Golang之字符串操作(反转中英文字符串)
- java执行程序默认多线程吗_Java多线程 执行程序(1)
- Nginx用为缓存服务器
- Win7+Ubuntu双系统时间不一致
- 程序员需知的 58 个网站
- 【稀饭】react native 实战系列教程之数据存储
- excel查重模型,老板不要再烦我
- 放眼看政策!2022年武汉市光谷招贤令奖励补贴政策以及申报条件!
- java中抓阄_有种取名是让宝宝“抓阄”选,宝妈打开纸条后笑了:你自己选的...
- [ html5 ] 图片默认外边框
- [附源码]Python计算机毕业设计大学生校园社团管理系统
- HTTPS – 证书签发申请(CSR) - qikegu.com
- 使用expect ftp免交互上传文件
- 2016百度之星 - 测试赛(热身,陈题)1001,1002,1003,1004
- 基于steam的游戏销量预测 — PART 1 — 爬取steam游戏相关数据的爬虫