mysql exists 的使用

mysql exists 的使用,第1张

if exists (select * from sys.databases where name = ’数据库名’)drop database [数据库名] if exists (select * from sys.databases where name = ’数据库名’) drop database [数据库名]iF EXISTS(结果集)是指如果存在结果集(结果集的记录数大于0),就执行。就是说:EXISTS(结果集)是一个条件。是IF (条件)中“条件”的一种。

常用的create table if not exists tablename;表示创建表tablename是,如果已存在,不 *** 作,不报错,如果不加if not exists ,会报错

确切的说加上exists的判断,可以防止报错,是一种mysql扩展

现在我们来分析一下题主的问题。

先来看看书中的语句

SELECT cname FROM course WHERE NOT exists

(SELECT * FROM sc,student WHERE sc.sno=student.sno AND 

sc.cno=course.cno AND ssex='男')

这是一个父子关联 not exists 非存在子查询。我们知道父子关联exists子查询可检索出主查询结果集(父)中与子查询结果集(子)的“交集”,加上关键字not则取反,返回父中与子的“非交集”。

那么上述语句的实际上是返回课程表"course"中所有的课程中与被男生选修过课程的“非交集”。也就是在剩下的未被男生选修过的课程列表里,即可能存在被女生选修过的课程,也可能存在男生和女生都没有选修过的课程。从这个角度来看书中的SQL语句的运行结果是正确的,数据库引擎运算不存在BUG。

如果书中说“选出未被男生选读的课程名单”上述语句是正确的,如果以此反推未被男生选过的课程就是“只有女生选过的课程”就不够严谨,因为这正如上面所说过的那样,男生未选读的课程还可能包含女生也未选读的课程。严格来讲,要列出“只有女生选读的课程”,除了要排除男生外,还要排除女生未选读的课程。题主的第二个语句对主表做了进一步筛选因此有了不一样的效果。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8638729.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-19
下一篇 2023-04-19

发表评论

登录后才能评论

评论列表(0条)

保存