早教吧作业答案频道 -->英语-->
selectsname from swhere notexists(select* fromc wherenotexists(select* fromsc wheres.sno=sc.sno andsc.c
题目详情
select sname from s where not exists
( select * from c where not exists
(select * from sc where s.sno=sc.sno and sc.cno=c.cno));
原题是这样的:Find the students who take all the courses and list their names.(相当于查询这样的学生,没有一门课是他不选的)
上面的是答案,但是不知道not exists怎么理解
( select * from c where not exists
(select * from sc where s.sno=sc.sno and sc.cno=c.cno));
原题是这样的:Find the students who take all the courses and list their names.(相当于查询这样的学生,没有一门课是他不选的)
上面的是答案,但是不知道not exists怎么理解
▼优质解答
答案和解析
exists 与 not exists存在谓词,判断并返回布尔类型结果.
select sname from s
where not exists (select * from c where not exists (select * from sc where s.sno=sc.sno and sc.cno=c.cno));
下面这句你把where后面的连接条件去掉理解就是选了课的所有课号和学号,
select * from sc where s.sno=sc.sno and sc.cno=c.cno
下面这句把WHERE 后面的SNO的连接条件去掉理解就是
没有被选的课程信息
select * from c where not exists (select * from sc where s.sno=sc.sno and sc.cno=c.cno));
因为这个关系模式牵扯到三个表,整个代码中的WHERE都是连接条件,你不要在这里钻牛角尖.
整个句子是这个意思,
S表不存在这样的人(姓名),他的学号在SC表里出现,他的SC表的课号没有在C表出现.
换个角度理解就是这个学号的SC表的课号全部在C表出现了,那么这个学号就是选了所有课的学号,根据学号,又能从S表获得姓名.
两个否定逻辑判断推出肯定的学生姓名.
select sname from s
where not exists (select * from c where not exists (select * from sc where s.sno=sc.sno and sc.cno=c.cno));
下面这句你把where后面的连接条件去掉理解就是选了课的所有课号和学号,
select * from sc where s.sno=sc.sno and sc.cno=c.cno
下面这句把WHERE 后面的SNO的连接条件去掉理解就是
没有被选的课程信息
select * from c where not exists (select * from sc where s.sno=sc.sno and sc.cno=c.cno));
因为这个关系模式牵扯到三个表,整个代码中的WHERE都是连接条件,你不要在这里钻牛角尖.
整个句子是这个意思,
S表不存在这样的人(姓名),他的学号在SC表里出现,他的SC表的课号没有在C表出现.
换个角度理解就是这个学号的SC表的课号全部在C表出现了,那么这个学号就是选了所有课的学号,根据学号,又能从S表获得姓名.
两个否定逻辑判断推出肯定的学生姓名.
看了 selectsname ...的网友还看了以下:
设有关系S(SNO,SNAME,SEX),C(CNO,CNAME),SC(SNO,CNO,GRADE 2020-05-23 …
设有关系SC(SNO,CNO,GRADE),主码是(SNO,CNO)。遵照实体完整性规则 A.只有S 2020-05-23 …
设学生关系S(sno, sname, sex, dept)的主码为sno,学生选课关系SC(sno, 2020-05-23 …
设学生关系S(sno,sname,sex,dept)的主码为sno,学生选课苯系SC(sno,cno 2020-05-23 …
设学生关系S(sno,sname,sex,dept)的主码为sno,学生选课关系SC(sno,cno 2020-05-24 …
A.SPZ.Sno=SPY.Sno AND SPZ.Pno=SPY.PnoB.SPZ.Sno=SPX 2020-05-26 …
A.SPY.Sno='168’B.SPY.Sno<>'168'C.SPY.Sno=SPX.SnoD. 2020-05-26 …
A.SPY. Sno='168'B.SPY Sno<>'168'C.SPY. Sno=SPX. Sn 2020-05-26 …
A.SPZ. Sno=SPY. Sno AND SPZ. Pno=SPY. PnoB.SPZ. Sn 2020-05-26 …
selectsname from swhere notexists(select* f 2020-06-14 …