如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
selectcno,count(sno)fromsctgroupbycnohavingcount(sno)>1selectsnofromsctgroupbysnohavingcount(*)>1selectstudent.*,sc.*fromstudent,scwherestudent.sno=sc.sno若在等值连接中把目标列中重复的属性列去掉则为自然连接selectstudent.sno,sname,ssex,sage,sdept,cno,gradefromstudent,scwherestudent.sno=sc.sno连接操作不仅可以在两个表之间进行,也可以是一个表与其自己进行连接,称为自身连接。查询一门课的间接先修课(即先修课的先修课)在Course表中,只有每门课的直接先修课信息,而没有先修课的先修课。要得到这个信息,必须先对一门课找到其先修课,再按此先修课的课程号,找到它的先修课程。这就要讲Course表与其自身连接。为此,要为Course表取两个别名,一个是first,一个是secondselectfirst.cno,second.cpnofromcoursefirst,coursesecondwherefirst.cpno=second.cno;selectstudent.sno,sname,ssex,sage,sdept,cno,gradefromstudentleftjoinscon(student.sno=sc.sno);复合条件连接:查询选修2号课程的且成绩在60分以上的所有学生selectstudent.sno,snamefromstudent,scwherestudent.sno=sc.snoandsc.cno=2andsc.grade>60;连接操作除了可以是两表连接,一个表与其自身连接外,还可以是两个以上的表进行连接,后者通常称为多表连接。查询每个学生的学号、姓名、选修的课程名及成绩。selectstudent.sno,sname,cname,gradefromstudent,sc,coursewherestudent.sno=sc.snoandsc.cno=course.cno嵌套查询selectsnamefromstudentwheresnoin(selectsnofromscwherecno=2)带有In谓词的子查询selectsno,sname,sdeptfromstudentwheresdeptin(selectsdeptfromstudentwheresname='刘晨')本例中,子查询的查询条件不依赖于父查询,称为不相关子查询。一种求解方法是由里向外处理,即先执行子查询,子查询的查询结果用于建立其父查询的查询条件。得到如下的语句:selectsno,sname,sdeptfromstudentwheresdeptin('CS')本例中的查询也可以用自身连接来完成:selects1.sno,s1.sname,s1.sdeptfromstudents1,students2wheres1.sdept=s2.sdeptands2.sname='刘晨'可见,实现同一个查询可以有多种方法,当然不同的方法其执行效率可能会有差别,甚至会差别很大。这就是数据库编程人员应该掌握的数据库性能调优技术。查询选修了课程名为“信息系统”的学生学号和姓名。本查询涉及学号、姓名和课程名3个属性。学号和姓名存放在Student表中,课程名存放在Course表中,但Student与Course两个表之间没有直接联系,必须通过SC表建立它们二者之间的联系。所以本查询实际上涉及3个关系:selectsno,snamefromstudentwheresnoin(selectsnofromscwherecnoin(selectcnofromcoursewherecname='信息系统'));selectstudent.sno,snamefromstudent,sc,coursewherestudent.sno=sc.snoandsc.cno=course.cnoandcourse.cname='信息系统';带有比较运算符的子查询带有比较运算符的子查询是指父查询与子查询之间用比较运算符进行连接。selectsno,cnofromscxwheregrade>=(selectavg(grade)fromscywherey.sno=x.sno)带有any(some)或all谓词的子查询子查询返回单值时可以用比较运算符,但返回多值时要用any(有的系统用som