建立表1:学生
学号 姓名 年龄 所在系
98001 张三 20 计算机系
98005 李四 21 数学系
建立表2:选课
学号 课程名 成绩
98001 数据库 62
98001 数据结构 73
98005 微积分 80
98005 数据库 70
98005 数据结构 82
输入查询语句:SELECT `姓名` FROM `学生` WHERE NOT EXISTS(SELECT * FROM `选课` WHERE `学生`.`学号`=`学号` AND `课程名`='微积分');
得到结果:张三
NOT EXISTS不是简单地对EXISTS取反的关系
NOT EXISTS(不存在)是全部否定的意思
查询原理:
首先依次提取表1中每个元组的学号,第一个提取出的为98001
用此学号根据
`学生`.`学号`=`学号` AND `课程名`='微积分'
逐个与表2中的元组进行判断
判断结果为:N N N N N
所以NOT EXISTS返回的结果为True(注意此时的判断结果全为NO)
输出:张三
随后提取出98005与表2中的元组逐个进行判断
判断结果为:N N Y N N
所以NOT EXISTS返回的结果为False(注意此时判断结果中有一个YES)
所以此时没有输出