EXISTS和NOT EXISTS介绍
短信预约 -IT技能 免费直播动态提醒
带有(NOT) EXISTS谓词的子查询
1. 基本知识介绍
1. EXISTS代表存在量词
-
带有EXISTS谓词的子查询不反回任何数据,值产生逻辑真值**“true”**或逻辑假值 “false”
使用EXISTS查询后
- 若内存查询结果非空,则外层的WHERE子句返回真值,否则返回假值
- 由EXISTS引出的子查询,其目标列表达式通常都用* ,因为带EXISTS的子查询只返回真值或假值,给出列名没有意义
-
例题
//查询所有选修了 1号课程的学生姓名SELECT Sname FROM Student WHERE EXISTS (SELECT* FROM SC WHERE Sno = Student.Sno AND Cno='1');
2. NOT EXISTS
- 与EXIST谓词对应的是NOT EXISTS谓词,使用存在量词NOT EXISTS后,若内层查询结果为空,则外层的WHERE子句返回真值,否则返回假值
- 例题
//查询没有选修1号课程的学生姓名SELECT Sname FROM Student WHER NOT EXISTS(SELECT* FROM SC WHERE Sno = Student.Sno AND Cno='1');
2. 进阶
-
一些带有EXISTS或者NOT EXISTS谓词的子查询,不可以被其他形式的子查询等价代替,但是所有带有IN谓词、比较运算符、ANY或ALL谓词的子查询都可以用带有EXISTS谓词的子查询等价替换;
-
例题
//查询和“刘成”在同一系学习的学生//法1 用INSELECT Sname ,Sno,Sdept FROM Student WHERE Sdept IN(SELECT Sdept FROM Student WHERE Sname = '刘成'); //法二 用EXISTSSELECT Sname,Sno,SdeptFROM Student S1WHERE EXISTS (SELECT * FROM Student S2 WHERE S1.Sdept=S2.Sdept AND S2.Snmae='刘成');
3. 查询选修了所有课程的学生姓名 重点例题详解
//查询选修了所有课程的学生姓名SELECT Sname FROM Student WHERE NOT EXISTS (SELECT* FROM Course WHERE NOT EXISTS (SELECT* FROM SC WHERE Sno = Student.Sno AND Cno = Course.Cno)); SELECT* FROM Course WHERE NOT EXISTS//等价于 SELECT* FROM Course WHERE false
来源地址:https://blog.csdn.net/qq_57437175/article/details/123952321
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341