经典SQL问题“查询选修全部课程的学生姓名 ”。最后问什么还要廉洁SC表和S表?
100分
标签:选修 sc 课程 学生 where
回答:2 浏览:1308 提问时间:2010-10-04 23:45
回答:2 浏览:1308 提问时间:2010-10-04 23:45
请教各位大侠:
问题是:最后一句话
select * from SC where Snum=S.Snum and Cnum=C.Cnum
中为什么还要连接SC表和S表?
在SQL中试了试,不要Snum=S.Snum 结果是一样的。
而且从连接操作的角度看也是没必要连接的。因为SC表里面已经有Snum了。连接完无非是生成了一个把SC和S连接起来的新表:这个新的表行数和SC表一样。
只是在SC的每一行都加上了了S里的属性:Sname,Ssex,Sage,Dnum。
所以不明白为什么需要连接S表。
有学生选课关系
问题是:最后一句话
select * from SC where Snum=S.Snum and Cnum=C.Cnum
中为什么还要连接SC表和S表?
在SQL中试了试,不要Snum=S.Snum 结果是一样的。
而且从连接操作的角度看也是没必要连接的。因为SC表里面已经有Snum了。连接完无非是生成了一个把SC和S连接起来的新表:这个新的表行数和SC表一样。
只是在SC的每一行都加上了了S里的属性:Sname,Ssex,Sage,Dnum。
所以不明白为什么需要连接S表。
有学生选课关系
S(Snum,Sname,Ssex,Sage,Dnum)
Snum Sname Sex Age SD
S001 王明 男 19 D2
S002 李勇 男 23 D3
S003 刘燕 女 21 D1
S004 王萍 女 23 D1
S005 王佳 男 24 D3
S006 赵婷 女 20 D1
SC(Snum,Cnum,Score)
Snum Cnum Score
S001 C1 83
S001 C2 89
S001 C3 65
Snum Sname Sex Age SD
S001 王明 男 19 D2
S002 李勇 男 23 D3
S003 刘燕 女 21 D1
S004 王萍 女 23 D1
S005 王佳 男 24 D3
S006 赵婷 女 20 D1
SC(Snum,Cnum,Score)
Snum Cnum Score
S001 C1 83
S001 C2 89
S001 C3 65
S001 C4 85
S001 C5 85 每天学点sql经典句子
S002 C3 69
S002 C4 75
S003 C1 95
S004 C1 85
S005 C2 92
S005 C3 76
C(Cnum,Cname,Cfreq)
Cnum Cname Cfreq
C1 数据库系统原理 4
C2 C程序设计 4
C3 计算机体系结构 3
C4 自动控制原理 2
S001 C5 85 每天学点sql经典句子
S002 C3 69
S002 C4 75
S003 C1 95
S004 C1 85
S005 C2 92
S005 C3 76
C(Cnum,Cname,Cfreq)
Cnum Cname Cfreq
C1 数据库系统原理 4
C2 C程序设计 4
C3 计算机体系结构 3
C4 自动控制原理 2
C5 数据结构 4
比如查询选修全部课程的学生姓名
select Sname
from S
where not exists
(select *
from C
where not exists
(select *
from SC
where Snum=S.Snum
and Cnum=C.Cnum))
结果是王明
比如查询选修全部课程的学生姓名
select Sname
from S
where not exists
(select *
from C
where not exists
(select *
from SC
where Snum=S.Snum
and Cnum=C.Cnum))
结果是王明
共0条评论...
推荐资料: 安意如《人生若只如初见》.txt
更多"安意如"相关资料>>
最佳答案 此答案由提问者自己选择,并不代表爱问知识人的观点
揪错 ┆ 评论 ┆ 举报
Kevin
[大师]
我大致看了一下,是嵌套查询吧!
你应该这样理解:
select * from SC where Snum=S.Snum and Cnum=C.Cnum
这句语句的意思是:从SC表中选择学生号与S表中的学生号相同,且课程号与C表中的课
你应该这样理解:
select * from SC where Snum=S.Snum and Cnum=C.Cnum
这句语句的意思是:从SC表中选择学生号与S表中的学生号相同,且课程号与C表中的课
程号相同。即学生号与课程号都必须存在于它们自己的表中(S表和C表)!不这样写,可能会把不存在的学生号或者课程号返回出来,造成结果错误。虽然,可能与结果无异,但这样写是完整性约束的表述,相当有必要。
如果之前做过表间关联(S表的Snum,C表的Cnum,SC表的Snum和Cnum),那么这一步的数据一致性校验可以不做(表关联可以使不符合的数据无法输入到表中,从而在查询时也不会出现数据不一致的问题)。
你再理解一下,有不明白的地方,欢迎讨论。
如果之前做过表间关联(S表的Snum,C表的Cnum,SC表的Snum和Cnum),那么这一步的数据一致性校验可以不做(表关联可以使不符合的数据无法输入到表中,从而在查询时也不会出现数据不一致的问题)。
你再理解一下,有不明白的地方,欢迎讨论。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论