学数据库的时候你们老师一定那 选课那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))
SQL 中 exists 是怎么回事啊 怎么用啊 老师没讲懂 呵呵 高手都来帮忙啊
答案:4 悬赏:60
解决时间 2021-03-07 03:13
- 提问者网友:年齡太小℡蘿莉
- 2021-03-06 19:20
最佳答案
- 二级知识专家网友:开心就好
- 2021-03-06 20:31
这是哪三个表
学生表:student
sno,sname
0001,张三
0002,李四
0003,xxxx
...
课程表Course
cno,cname
001,语文
002,数学
003,英语
选课表
sno,cno
0001,001
0001,002
0001,003
0002,001
0002,002
....
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说起.
select * from sc where Sno=student.sno AND cno=Course.Cno
这个sql的意思就是遍历这三个表,
找到所有所有学生选修所有课程记的记录..
(select * from Course where not exists
(select * from sc where Sno=student.sno AND cno=Course.Cno))
那么这条sql,依据上条sql的意思是,就是选中上条sql的相反的条件,就是加入某个学生没有选某个课程,就把这个记录查出来,
假如学生0003没有选课程003,
学生0004没有选001等等.
那么最后
select Sname
from student
Where not exists
(select * from Course where not exists
(select * from sc where Sno=student.sno AND cno=Course.Cno))
这句就排除了所有没有选一门课的学生,只要某个学生没有选某们课,不管是哪一门,就在上面的sql过滤出来了,那么上句sql的相反的,
就是 not exists (不符合上面sql结果的)
就是选全部课程的学生了
我的表达意思不是很清楚,不知道能否看懂呢.....
not exists的含义你可以google出来,上面几位也说的很清楚了
这句三层嵌套语句就是这么个含义....
当然,举一反三,你也可以写出, 被全部学生都选的课程,,,被全部学生都不选的课程,,,呵呵...
学生表:student
sno,sname
0001,张三
0002,李四
0003,xxxx
...
课程表Course
cno,cname
001,语文
002,数学
003,英语
选课表
sno,cno
0001,001
0001,002
0001,003
0002,001
0002,002
....
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说起.
select * from sc where Sno=student.sno AND cno=Course.Cno
这个sql的意思就是遍历这三个表,
找到所有所有学生选修所有课程记的记录..
(select * from Course where not exists
(select * from sc where Sno=student.sno AND cno=Course.Cno))
那么这条sql,依据上条sql的意思是,就是选中上条sql的相反的条件,就是加入某个学生没有选某个课程,就把这个记录查出来,
假如学生0003没有选课程003,
学生0004没有选001等等.
那么最后
select Sname
from student
Where not exists
(select * from Course where not exists
(select * from sc where Sno=student.sno AND cno=Course.Cno))
这句就排除了所有没有选一门课的学生,只要某个学生没有选某们课,不管是哪一门,就在上面的sql过滤出来了,那么上句sql的相反的,
就是 not exists (不符合上面sql结果的)
就是选全部课程的学生了
我的表达意思不是很清楚,不知道能否看懂呢.....
not exists的含义你可以google出来,上面几位也说的很清楚了
这句三层嵌套语句就是这么个含义....
当然,举一反三,你也可以写出, 被全部学生都选的课程,,,被全部学生都不选的课程,,,呵呵...
全部回答
- 1楼网友:气场征服一切
- 2021-03-07 00:20
exists 代表存在量词。带有exists谓词的子查询不返回任何数据,只产生逻辑真值“true”或者逻辑假值“false”。
使用存在量词exists后,若内存查询结果非空,则外层的where子句返回真值,否则返回假值。
- 2楼网友:浪女动了心
- 2021-03-06 22:47
exists 是指:是否存在 的意思
例如你要新建一个新的数据库 但是不知道以前SQLSERVER里是否已经存在该数据库了 则可以使用如下语句
IF EXISTS (SELECt * FROM SYSDATABASES WHERe NAME = 'TEST')
DROP DATABASE 'TEST'
该句意思为:在数据库总记录中查找是否已存在名为‘TEST’的数据库,
如果存在(IF EXISTS) 则执行DROP操作,呵呵 能理解了吧
按照LZ发的题目来解答的话WHERe NOT EXISTS的意思就是为,“不存在于”子查询返回的记录中
- 3楼网友:星痕之殇
- 2021-03-06 21:44
exists 是指:是否存在 的意思
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯
• 手机登qq时,显示手机磁盘不足,清理后重新登 |
• 刺客的套装怎么选啊? |