欢迎来到天天文库
浏览记录
ID:8849960
大小:41.00 KB
页数:2页
时间:2018-04-09
《经典的学生选课sql语句》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、经典SQL问题“查询选修全部课程的学生姓名”。最后问什么还要廉洁SC表和S表?100分标签:选修sc课程学生where回答:2 浏览:1308 提问时间:2010-10-0423:45请教各位大侠:问题是:最后一句话select*fromSCwhereSnum=S.SnumandCnum=C.Cnum中为什么还要连接SC表和S表?在SQL中试了试,不要Snum=S.Snum结果是一样的。而且从连接操作的角度看也是没必要连接的。因为SC表里面已经有Snum了。连接完无非是生成了一个把SC和S连接起来的新表:这个新的表行数和
2、SC表一样。只是在SC的每一行都加上了了S里的属性:Sname,Ssex,Sage,Dnum。所以不明白为什么需要连接S表。有学生选课关系S(Snum,Sname,Ssex,Sage,Dnum)SnumSnameSexAgeSDS001王明男19D2S002李勇男23D3S003刘燕女21D1S004王萍女23D1S005王佳男24D3S006赵婷女20D1SC(Snum,Cnum,Score)SnumCnumScoreS001C183S001C289S001C365S001C485S001C585S002C369S00
3、2C475S003C195S004C185S005C292S005C376C(Cnum,Cname,Cfreq)CnumCnameCfreqC1数据库系统原理4C2C程序设计4C3计算机体系结构3C4自动控制原理2C5数据结构4比如查询选修全部课程的学生姓名selectSnamefromSwherenotexists(select*fromCwherenotexists(select*fromSCwhereSnum=S.SnumandCnum=C.Cnum))结果是王明共0条评论...推荐资料:安意如《人生若只如初见》.
4、txt更多"安意如"相关资料>>最佳答案此答案由提问者自己选择,并不代表爱问知识人的观点揪错┆评论┆举报Kevin[大师]我大致看了一下,是嵌套查询吧!你应该这样理解:select*fromSCwhereSnum=S.SnumandCnum=C.Cnum这句语句的意思是:从SC表中选择学生号与S表中的学生号相同,且课程号与C表中的课程号相同。即学生号与课程号都必须存在于它们自己的表中(S表和C表)!不这样写,可能会把不存在的学生号或者课程号返回出来,造成结果错误。虽然,可能与结果无异,但这样写是完整性约束的表述,相当有必
5、要。如果之前做过表间关联(S表的Snum,C表的Cnum,SC表的Snum和Cnum),那么这一步的数据一致性校验可以不做(表关联可以使不符合的数据无法输入到表中,从而在查询时也不会出现数据不一致的问题)。你再理解一下,有不明白的地方,欢迎讨论。
此文档下载收益归作者所有