在刚开始学习数据库时会遇到如何理解两层嵌套 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实现全称量词查询相关推荐

  1. 批量插入数据库语句java_java相关:MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码)...

    java相关:MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码) 发布于 2020-7-22| 复制链接 本文通过实例代码给大家分享了MyBatis批量插入数据到Oracle数据库 ...

  2. 如何判断数据库中的两个表是否相同(相等)?比较数据库中的两个表是否完全相同,包括字段和每条记录

    如何判断数据库中的两个表是否相同(相等)?比较数据库中的两个表是否完全相同,包括字段和每条记录 目录

  3. 如何在JAVA编程语言程序开发中更好的利用数据库中2两张表?

    数据库中2两张表 一张user表,一张pay表 department的外键在user表中做主键 则:用eclipse的自动翻转工具生成的配置文件如下 <?xml version="1. ...

  4. mysql gps数据查询_Mysql数据库中计算两GPS坐标的距离

    Mysql数据库中计算两GPS坐标的距离有两种方式: 1.直接使用SQL语句:#lat为纬度, lng为经度, 一定不要弄错 declare @lng1 float; declare @lat1 fl ...

  5. Mybatis中mapper文件中的两层循环

    导言 使用mapper.xml文件来存储和执行sql语句是Mybatis框架中重要的应用.在mapper.xml文件中对List数据的循环遍历较为普遍和常用,而两层或多层循环是大家不常用的.下面简单介 ...

  6. 详解PostgreSQL数据库中的两阶段锁

    点击上方"蓝字" 关注我们,享更多干货! 数据库中的对象是共享的,假如不同的用户同时修改某个对象,就会出现数据错乱,从而破坏数据库的数据一致性,违反事务的隔离性原则. 为了满足隔离 ...

  7. 数据库三级模式两层映射

    为什么会有三级模式?这里的话先解释一些这个东西,ANSI为了规范我们对数据库的使用,ANSI的数据库管理系统研究小组于1978年提出了标准化的建议,将数据库结构分为3级:面向用户或应用程序员的用户级. ...

  8. mysql查询最新插入的一条_我刚数据库中插入一条记录,紧接着再去查询却查不到?...

    向数据库 中奖记录表中 添加一条中奖 记录,马上调用方法查询这条记录, 查询不到! 我打开数据库查看 数据是插入成功的. 开发语言是用java, 框架 hibernate! 插入数据,和查询数据代码如 ...

  9. python将数据存入mysql数据库中_python3 两种方法将数据存入mysql数据库

    方法一:(数据量小的时候推荐使用这种) 第一步:pip install mysqlclient 这里我没有报错 也许你可能会报错Read timed out   此时不要慌,这是因为你的网络问题,你使 ...

最新文章

  1. 一大清早,我就被编辑赶出了办公室……
  2. Python3可变字符串代码实现
  3. UART_RECV详细设计方案
  4. 字符定长文件Linux怎么生成,Linux中的more命令-逐页显示长文本文件
  5. 8.8 正睿暑期集训营 Day5
  6. android 字符串反转,Golang之字符串操作(反转中英文字符串)
  7. java执行程序默认多线程吗_Java多线程 执行程序(1)
  8. Nginx用为缓存服务器
  9. Win7+Ubuntu双系统时间不一致
  10. 程序员需知的 58 个网站
  11. 【稀饭】react native 实战系列教程之数据存储
  12. excel查重模型,老板不要再烦我
  13. 放眼看政策!2022年武汉市光谷招贤令奖励补贴政策以及申报条件!
  14. java中抓阄_有种取名是让宝宝“抓阄”选,宝妈打开纸条后笑了:你自己选的...
  15. [ html5 ] 图片默认外边框
  16. [附源码]Python计算机毕业设计大学生校园社团管理系统
  17. HTTPS – 证书签发申请(CSR) - qikegu.com
  18. 使用expect ftp免交互上传文件
  19. 2016百度之星 - 测试赛(热身,陈题)1001,1002,1003,1004
  20. 基于steam的游戏销量预测 — PART 1 — 爬取steam游戏相关数据的爬虫

热门文章

  1. iphone丢失后找回
  2. python求解最长前缀公共子串
  3. java编程,计算餐馆_java编程经验汇总(6)
  4. 1949: 没名字的题
  5. 浏览器兼容:火狐不支持webq格式图片
  6. Android AdapterView以及子类
  7. 关于StringBuilder 的清空问题
  8. 2021-06-27 五星好评的实现
  9. [league/glide]两行代码实现一套强大的图片处理HTTP服务
  10. WPF 使用RichTextBox