首页 技术 正文
技术 2022年11月20日
0 收藏 927 点赞 4,052 浏览 785 个字

SQL语言中没有蕴含逻辑运算。但是,可以利用谓词演算将一个逻辑蕴含的谓词等价转换为:p->q ≡┐p∨q.

我们通过一个具体的题目来分析:(具体的表和数据详见文章:Mysql数据库中的EXISTS和NOT EXISTS

题目:查询至少选修了学生200215122选修的全部课程的学生号码。

本查询可以用逻辑蕴含来表达:查询学号为x的学生,对所有的课程y,只要200215122学生选修了课程y,则x也选修了y。

形式化表示如下:

用p表示谓词“学生200215122选修了课程y”;用q表示谓词“学生x选修了课程y”.

则上述查询为:(∀y)p->q

该查询可以转换为如下等价形式:

(∀y)p->q ≡ ┐(∃y(┐(p->q)))≡ ┐(∃y(┐(┐p∨q)))≡ ┐∃y(p∧┐q)

它所表达的语义是这样的:不存在这样的课程y,学生200215122选修了y,而学生x没有选。

对应的SQL语句:

SELECT DISTINCT Sno
FROM SC SCX
WHERE NOT EXISTS
(SELECT * FROM SC SCY WHERE SCY.Sno='200215122' AND NOT EXISTS
(SELECT * FROM SC SCZ WHERE SCZ.Sno=SCX.Sno AND SCZ.Cno=SCY.Cno)
);

首先对SCX中的第一条记录(200215121),SCY的第一条Sno=’200215122’的记录进行判断,结果有数据返回,NOT EXISTS的值为假;

然后对SCY的下一条Sno=’2002151221’的记录进行判断,直到遍历完所有的SCY的Sno=’200215122’,NOT EXISTS的值始终为假,则中间层的WHERE的值为假,最外层的NOT EXISTS的值为真,所以第一条数据符合查询条件,存放到结果表中;

然后对SCX中的下一条记录进行查询,直到遍历玩SCX表中所有数据。

结果输出:Mysql数据库中的EXISTS和NOT EXISTS

上一篇: Java 注解机制
下一篇: C# 控件包
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,024
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,514
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,362
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,143
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,776
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,854