select Sname from Student

where not exists

(select * from Course

where not exists

(select * from SC

where

Sno=Student.Sno

and

Cno=Course.Cno));

学习sql的时候碰到这货,有点难理解,问度娘找谷哥,终于明白...记录如下:

一、表的结构和数据如下:

Student:

Course:

SC:

二、SQL语句执行过程:

1、sql 结构分析

主查询:select Sname from Student;

嵌套 主查询:select * from Course...

嵌套 子查询:select * from SC where Sno=Student.Sno and Cno=Student.Cno;

关键字:not exists

2、执行过程:

注意:下表中以主键代表该条记录

步骤

主查询 记录

嵌套 主查询 记录

嵌套 子查询

嵌套主查询结果集

主查询的结果记录

1

200215121

1

无匹配记录

结果集为空

200215121

2

200215121

2

无匹配记录

200215121

3

200215121

3

无匹配记录

200215121

4

200215121

4

无匹配记录

200215121

5

200215121

5

无匹配记录

200215121

6

200215121

6

无匹配记录

200215121

7

200215121

7

无匹配记录

200215121

8

200215122

1

有匹配记录

结果集非空

null

9

...

...

...

...

10

200215122

7

有匹配记录

null

11

200215123

1

有匹配记录

结果集非空

null

12

...

...

...

...

...

13

200215123

7

有匹配记录

结果集非空

null

14

200215125

1

有匹配记录

结果集非空

null

15

...

...

...

...

...

16

200215125

7

有匹配记录

结果集非空

null

由上图可知该查询语句的返回结果是:

附文字说明:

首先,将主查询的记录和嵌套 主查询的记录查出

然后,取主查询中的第一条记录,依次遍历嵌套 主查询的记录,替换嵌套子查询中的查询条件为Sno=‘200215121’ and Cno=k,(k=1,2,3,4,5,6,7);

取主查询中的第二条记录,依次遍历嵌套查询中的记录,替换嵌套子查询中的查询条件为Sno='200215122' and Cno=k,(k=1,2,3,4,5,6,7);

最后,记录嵌套 主查询为空的主查询记录,将这些记录构成一个结果集即为此查询语句的结果集。

三、总结

1、作为where 查询条件时,exists(结果集为空返回false,否则返回true)

not exists(结果集为空返回true,否则返回false)

2、相关子查询,用主查询的相关属性去替换子查询中的条件从而匹配主结果集

3、题目情景出自某教科书

mysql中的exists嵌套_基于mysql 的exists 嵌套查询的详解相关推荐

  1. mysql中时间处理函数_基于mysql时间处理函数的应用详解

    DAYOFWEEK(date) 返回日期date的星期索引(1=星期天,2=星期一, --7=星期六).这些索引值对应于ODBC标准. mysql> select DAYOFWEEK('1998 ...

  2. mysql 点赞数据库设计_基于redis实现的点赞功能设计思路详解

    点赞其实是一个很有意思的功能.基本的设计思路有大致两种, 一种自然是用mysql等 数据库直接落地存储, 另外一种就是利用点赞的业务特征来扔到redis(或memcache)中, 然后离线刷回mysq ...

  3. 单片机控制两个步进电机画圆_基于单片机的步进电机转速控制设计详解(附程序)...

    步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件.在非超载的情况下,电机的转速.停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角.这 ...

  4. keepalived mysql双主架构图_基于MySQL双主的高可用解决方案理论及实践

    MySQL在互联网应用中已经遍地开花,但是在银行系统中,还在生根发芽的阶段.本文记录的是根据某生产系统实际需求,对数据库高可用方案从需求.各高可用技术特点对比.实施.测试等过程进行整理,完善Mysql ...

  5. mysql中having的例子_有关mysql中having子句对组记录进行筛选的例子

    mysql中having的用法having字句,筛选成组后的各种数据,where字句在聚合前先筛选记录,即它作用在group by和having字句前,而 having子句在聚合后对组记录进行筛选. ...

  6. mysql中下列关于创建_在 MySQL 中,下列关于创建数据库表的描述正确的是( )。_学小易找答案...

    [单选题]在表中设置外键实现的是哪一类数据完整性( ) [单选题]以下为概念模型的是() [论述题]• 参照 < 中国图书馆分类法 > ,谈一下你对自己所学专业在整个科学知识领域中所在的位 ...

  7. mysql 2个排序规则_基于mysql 默认排序规则的坑

    mysql默认varchar类型是对大小写不敏感(不区分),如果想要mysql区分大小写需要设置排序规则: utf8_bin将字符串中的每一个字符用二进制数据存储,区分大小写. utf8_genera ...

  8. mysql经典sql语句大全_常用经典SQL语句大全完整版--详解+实例 (存)

    下列语句部分是Mssql语句,不可以在access中使用. SQL分类: DDL-数据定义语言(CREATE,ALTER,DROP,DECLARE) DML-数据操纵语言(SELECT,DELETE, ...

  9. mysql中xml字段提取_从Mysql XML转储中提取数据xml.dom.minidom

    我用phpmyadmin将mysql数据库导出到xml,现在我想用minidom解析它,但是我无法以我需要的形式获取内容.在 摘要:我需要将变量title分配给This is the title中包含 ...

最新文章

  1. autoware使用相机和深度学习进行目标检测(六)
  2. 隔壁,阿里18k老测试员常用的 软件测试工具大全
  3. 构建Chua 混沌电路 - 基本测试
  4. Xcode 中关于#的小知识
  5. 11张图让你看完苹果发布会
  6. CygWin / 获取 root 权限的方法
  7. 数据结构Java05【二叉树概述、二叉树遍历、堆排序、线索二叉树实现及遍历】
  8. [C/C++基础知识] 一篇就让你彻底搞懂qsort快速排序的文章
  9. Sitemesh 3 的使用及配置
  10. 寻求神谕的词语:谈海日寒诗集《空山集》
  11. ArcGIS中实现将圆16等分
  12. 概率论笔记:随机数、概率分布(正态分布)、中心极限定理(大数定理)
  13. php支持的协议与封装协议
  14. 抽头延时信道模型matlab,频率选择性衰落信道模型研究与仿真.docx
  15. 【阿里云短信】开通使用
  16. centos系统中perl进程病毒占用大量网络流量导致网络瘫痪的问题分析及解决方案
  17. android图片编辑加文字,图片编辑加字下载-图片编辑加字 安卓版v3.9.0.0406-PC6安卓网...
  18. 智慧社区管理系统06(业主列表和功能实现)
  19. 个人建站赚钱的5种常见方法
  20. 乐视超级电视刷鸿蒙,乐视超3X55刷精简+root系统记录

热门文章

  1. 转: VB.Net 中实现延迟的几种方法分析
  2. RocketMq 封装工具类
  3. linux强大的游戏模拟器--GBA
  4. 织梦采集,织梦采集工具,织梦cms免费采集
  5. oracle主表子表,oracle查询包含在子表中的主表数据
  6. zabbix--问题
  7. oracle时间判断上下午,oracle查询时间的判断
  8. 什么是webview?用在哪里?
  9. 计算机组成原理复试面试问题
  10. 《高德地图app AR导航》安装及设置 【全景导航 】【视频导航】【AR导航】