mysql中的exists嵌套_基于mysql 的exists 嵌套查询的详解
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 嵌套查询的详解相关推荐
- mysql中时间处理函数_基于mysql时间处理函数的应用详解
DAYOFWEEK(date) 返回日期date的星期索引(1=星期天,2=星期一, --7=星期六).这些索引值对应于ODBC标准. mysql> select DAYOFWEEK('1998 ...
- mysql 点赞数据库设计_基于redis实现的点赞功能设计思路详解
点赞其实是一个很有意思的功能.基本的设计思路有大致两种, 一种自然是用mysql等 数据库直接落地存储, 另外一种就是利用点赞的业务特征来扔到redis(或memcache)中, 然后离线刷回mysq ...
- 单片机控制两个步进电机画圆_基于单片机的步进电机转速控制设计详解(附程序)...
步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件.在非超载的情况下,电机的转速.停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角.这 ...
- keepalived mysql双主架构图_基于MySQL双主的高可用解决方案理论及实践
MySQL在互联网应用中已经遍地开花,但是在银行系统中,还在生根发芽的阶段.本文记录的是根据某生产系统实际需求,对数据库高可用方案从需求.各高可用技术特点对比.实施.测试等过程进行整理,完善Mysql ...
- mysql中having的例子_有关mysql中having子句对组记录进行筛选的例子
mysql中having的用法having字句,筛选成组后的各种数据,where字句在聚合前先筛选记录,即它作用在group by和having字句前,而 having子句在聚合后对组记录进行筛选. ...
- mysql中下列关于创建_在 MySQL 中,下列关于创建数据库表的描述正确的是( )。_学小易找答案...
[单选题]在表中设置外键实现的是哪一类数据完整性( ) [单选题]以下为概念模型的是() [论述题]• 参照 < 中国图书馆分类法 > ,谈一下你对自己所学专业在整个科学知识领域中所在的位 ...
- mysql 2个排序规则_基于mysql 默认排序规则的坑
mysql默认varchar类型是对大小写不敏感(不区分),如果想要mysql区分大小写需要设置排序规则: utf8_bin将字符串中的每一个字符用二进制数据存储,区分大小写. utf8_genera ...
- mysql经典sql语句大全_常用经典SQL语句大全完整版--详解+实例 (存)
下列语句部分是Mssql语句,不可以在access中使用. SQL分类: DDL-数据定义语言(CREATE,ALTER,DROP,DECLARE) DML-数据操纵语言(SELECT,DELETE, ...
- mysql中xml字段提取_从Mysql XML转储中提取数据xml.dom.minidom
我用phpmyadmin将mysql数据库导出到xml,现在我想用minidom解析它,但是我无法以我需要的形式获取内容.在 摘要:我需要将变量title分配给This is the title中包含 ...
最新文章
- autoware使用相机和深度学习进行目标检测(六)
- 隔壁,阿里18k老测试员常用的 软件测试工具大全
- 构建Chua 混沌电路 - 基本测试
- Xcode 中关于#的小知识
- 11张图让你看完苹果发布会
- CygWin / 获取 root 权限的方法
- 数据结构Java05【二叉树概述、二叉树遍历、堆排序、线索二叉树实现及遍历】
- [C/C++基础知识] 一篇就让你彻底搞懂qsort快速排序的文章
- Sitemesh 3 的使用及配置
- 寻求神谕的词语:谈海日寒诗集《空山集》
- ArcGIS中实现将圆16等分
- 概率论笔记:随机数、概率分布(正态分布)、中心极限定理(大数定理)
- php支持的协议与封装协议
- 抽头延时信道模型matlab,频率选择性衰落信道模型研究与仿真.docx
- 【阿里云短信】开通使用
- centos系统中perl进程病毒占用大量网络流量导致网络瘫痪的问题分析及解决方案
- android图片编辑加文字,图片编辑加字下载-图片编辑加字 安卓版v3.9.0.0406-PC6安卓网...
- 智慧社区管理系统06(业主列表和功能实现)
- 个人建站赚钱的5种常见方法
- 乐视超级电视刷鸿蒙,乐视超3X55刷精简+root系统记录