数据库除关系运算符案例详解

声明与简介

数据库里的Div(除)运算符是借鉴了数学基本元素除的理念,即整体除以个体,得到组(满足个体的特征的集合)。

所以如果“被除数”的集合R有4个元素,而“除数”的集合S有3个元素,则最终结果为R里的1个属性(S里的元素都能匹配到R的非S属性)。

除关系运算符的计算

这里除的含义是同时被S集合里的学号选择的课程号,这里不难发现结果是课程号1、2。

代码完整版

以下以SQL来演示上述的执行过程及结果。

-- 0 创建并初始化表和数据
CREATE TABLE course(
cno int,
sno int
);
CREATE TABLE stu(
sno int
);
INSERT INTO course VALUES(1,2);
INSERT INTO course VALUES(2,2);
INSERT INTO course VALUES(3,2);
INSERT INTO course VALUES(1,3);
INSERT INTO course VALUES(2,3);
INSERT INTO course VALUES(1,4);
INSERT INTO stu VALUES(2);
INSERT INTO stu VALUES(3);-- 当前演示数据库环境是mysql8.0.23,同时适用支持CTE的SQL Server、Oracle版本。
-- 1 SQL代码完整版
with T1 as (SELECT DISTINCT cno FROM(SELECT A.cno,A.sno FROM course AJOIN stu BON A.sno = B.sno)A
),
T2 as (SELECT B.cno,C.sno
FROM T1 B,(SELECT sno FROM stu)C
)SELECT T1.* FROM T1
LEFT JOIN
(select T2.* from T2 LEFT JOIN courseON T2.cno = course.cno AND T2.sno=course.snoWHERE course.cno IS NULL
)T3
ON T1.cno = T3.cno
WHERE T3.cno IS NULL
/*
结果
cno
1
2
*/

拆分详解

拆解版是对完整版里的每个步骤进行详细的介绍,这里每个Step对应贴图(书)内的步骤。

-- Step1 S集合里学号选的课程(即对应R集合的课程号),这里结果集定义为T1with T1 as (SELECT DISTINCT cno FROM(SELECT A.cno,A.sno FROM course AJOIN stu BON A.sno = B.sno)A
)
SELECT * FROM T1;
/*
结果
cno
1
2
3
*/-- Step2 T1与S集合做笛卡尔积,这里定义结果集为T2。
-- 注,因为CTE的特点,多个需要以逗号隔开,所以CTE T1、T2需一起定义
T2 as (SELECT B.cno,C.sno
FROM T1 B,(SELECT sno FROM stu)C
)SELECT * FROM T2 ORDER BY sno,cno;
/*
结果
cno sno
1   2
2   2
3   2
1   3
2   3
3   3
*/-- Step3 通过课程编号、学号关联T2、course,取仅在T2内的课程编号、学号。
-- 这里假定当前结果集为T3
select T2.* from T2
LEFT JOIN course
ON T2.cno = course.cno AND T2.sno=course.snoWHERE course.cno IS NULL
/*
结果
cno sno
3 3
*/-- Step4 仅取课程编号
-- 此 步对应Step3里仅取cno字段。
/*
结果
cno
3
*/-- Step5 通过课程编号关联T1、T3,取仅在T1的课程编号。
SELECT T1.* FROM T1
LEFT JOIN T3
ON T1.cno = T3.cno
WHERE T3.cno IS NULL
/*
结果
cno
1
2
*/

数据库除关系运算符执行过程详解相关推荐

  1. Hadoop学习之Mapreduce执行过程详解

    一.MapReduce执行过程 MapReduce运行时,首先通过Map读取HDFS中的数据,然后经过拆分,将每个文件中的每行数据分拆成键值对,最后输出作为Reduce的输入,大体执行流程如下图所示: ...

  2. mysql查询解析过程_MySQL查询执行过程详解

    查询是用户通过设置某些查询条件,从表或其他查询中选取全部或者部分数据,以表的形式显示数据供用户浏览.查询是一个独立的.功能强大的.具有计算功能和条件检索功能的数据库对象.MySQL数据库中,MySQL ...

  3. 一个sql的执行过程详解

    作者:猿来是八阿哥 链接:https://www.jianshu.com/p/e2926d6a808f 一个sql的执行过程 一. 组成部分 PDO_MYSQL is a driver that im ...

  4. sql server修改字段编码格式_原理:一条 sql 的执行过程详解

    思维导航: 写操作执行过程 组件介绍 1.undo log 与 MVCC 2.redo log 与 Buffer Pool 3.bin log(Server 层) 1.连接器 2.缓存(Cache) ...

  5. ajax是宏任务还是微任务,(滴滴面试)事件循环Event Loop及微任务和宏任务的执行过程详解...

    之前一直在面试,对于一些大厂面试题真的还是很注重原理和基础的, 还有就是数据结构和算法这种,校招的话,这些是很重要的, 前天和滴滴的人面试,问的真心觉得不难,而且也都是现在面试前端很常见的问题, 对于 ...

  6. 非相关子查询和相关子查询执行过程详解

    前段时间有一个相关子查询的SQL语句,看不太懂他是如何执行的,为什么会出现那个结果.着实纠结了一把.下面来讲一下非相关子查询和相关子查询的执行过程是怎样的. 非相关子查询 先看一个非相关子查询到sql ...

  7. MySQL探秘(二):SQL语句执行过程详解

    只有更加全面地了解SQL语句执行的每个过程,才能更好的进行SQL的设计和优化.  当希望MySQL能够以更高的性能运行查询时,最好的办法就是弄清楚MySQL是如何优化和执行查询的.一旦理解了这一点,很 ...

  8. mysql sql执行过程_MySQL探秘(二):SQL语句执行过程详解

    昔日庖丁解牛,未见全牛,所赖者是其对牛内部骨架结构的了解,对于MySQL亦是如此,只有更加全面地了解SQL语句执行的每个过程,才能更好的进行SQL的设计和优化. 当希望MySQL能够以更高的性能运行查 ...

  9. Linux is执行程序命令,linux命令执行过程详解

    1.执行命令 输入命令后回车 提请shell程序找到键入命令所对应的可执行程序或者代码,并且由其分期后,提交给内核分配资源将其运行起来. 在shell中可执行的命令有俩类: 内部命令:由shell自带 ...

最新文章

  1. fedora apache php,Fedora 20下安装搭建LAMP环境Apache+MySQL+PHP
  2. python 格式化字符串_Python字符串三种格式化输出
  3. AES加密算法动画演示
  4. 百度App Objective-C/Swift 组件化混编之路(一)
  5. python语法_算数运算+赋值运算符+比较运算符+逻辑运算符
  6. Java基础学习总结(110)——Java主要技术点总结
  7. bellman ford优先队列优化简介模板
  8. PPA 软件源 ppa:ondrej/php 在哪里找到的
  9. jsp测试mysql_求一段jsp连接mysql的测试程序
  10. 计算机考试多少个小时,考驾照科一电脑刷几个小时
  11. Using QByteRef with an index pointing outside the valid range of a QByteArray
  12. 一步一步学RMAN第五篇 RMAN基础知识补充 一
  13. python opencv入门 鼠标绘图(4)
  14. 【Python】经典问题创建一个矩形类,定义方法 属性 初始化
  15. java 线性回归_Java实现一元线性回归
  16. Tkinter 8.5 参考手册: a GUI for Python (五)8(鼠标)指针
  17. vb.net画图程序介绍
  18. PPA 完全指南,如何在 Ubuntu 系统中使用 PPA
  19. Quorum Raft
  20. Ubuntu20.04 交叉编译openssl 1.0.1f

热门文章

  1. VTK:点定位器用法实战
  2. OpenCASCADE绘制测试线束:图形命令之AIS 查看器——显示命令
  3. boost::shared_ptr相关的测试程序
  4. boost::multiprecision模块mpfi相关的测试程序
  5. GDCM:MD5的测试程序
  6. Boost:是否支持sse2指令的测试程序
  7. Boost:bimap双图信息的测试程序
  8. Boost:boost::mp11的使用实例
  9. VTK:PolyData之Stripper
  10. OpenCV输出版本和构建配置的实例(附完整代码)