利用sqlserver1.掌握涉及一个以上数据表的查询方法。2.掌握等值连接3.掌握自然连接4.掌握非等值连接5.掌握自身连接、外连接和复合条件连接
工具/原料
sqlserver
方法/步骤
1、 查询不同课程成绩相同的学生的学号、课程号、学生成绩(自身连接)selecta.*fromsca,scbwherea.score=b.scoreanda.cno<>b.cno
2、 查询课程编号为c001且课程成绩在80分以上的学生的学号和姓名selectstudent.sno,snamefromstudent,scwherestudent.sno=sc.snoandsc.cno='c001'andscore>=80
3、 查询不及格的课程,并按课程成绩降序排列selectsc.sno,cname,scorefromsc,coursewheresc.cno=course.cnoandsc.score<60orderbyscoredesc
4、 查询课程成绩在70分以上的姓名、课程名称和分数;selectsname,cname,scorefromsc,student,coursewheresc.sno=student.snoandsc.cno=course.cnoandsc.score>70
5、 查询课程名称为“Oracle”,且分数低于60的学生姓名和分数selectsname,scorefromstudent,sc,coursewheresc.sno=student.snoandsc.cno=course.cnoandcourse.cname='Oracle'andscourse.score<60
6、 查询平均成绩大于85的所有学生的学号、姓名和平均成绩selectstudent.sno,sname,avg(score)as平均成绩fromstudentjoinsconstudent.sno=sc.snogroupbystudent.sno,snamehavingavg(score)>85
7、笪瞵岔语 查询出只选修了一门课程的全部学生的学号和姓名selectstudent.sno,snamef鸡堕樱陨romstudentleftjoinsconstudent.sno=sc.snogroupbystudent.sno,snamehavingcount(cno)=1注意:havingcount(cno)不能写成havingcount(*),因为没有成绩的学生信息也有一行数据。也可以:selectstudent.sno,snamefromstudent,scwherestudent.sno=sc.snogroupbystudent.sno,snamehavingcount(cno)=1
8、笪瞵岔语 统计列印各科成绩,各分数段人数:课程编号,课程名称,[100-85],[85-70], [70幻腾寂埒-60],[<60]selectcourse.cno,cname,sum(casewhenscore<60then1else0end)as'[<60]',sum(casewhenscore>=60andscore<70then1else0end)as'[70-60]',sum(casewhenscore>=70andscore<85then1else0end)as'[85-70]',sum(casewhenscore>=85andscore<100then1else0end)as'[100-85]'fromsc,coursewheresc.cno=course.cnogroupbycourse.cno,cname
9、笪瞵岔语 查询不同老师所教不同课程平均分从高到低显示,平均分最多保留两位小数。selectsc.cno荑樊综鲶,teacher.tname,cname,round(avg(score),2)as平均成绩fromcourse,sc,teacherwherecourse.cno=sc.cnoandcourse.tno=teacher.tnogroupbyteacher.tname,sc.cno,cnameorderbyavg(score)desc
10、若不想把cname放在groupby里,也可以放在一些聚集函数,但不影响它的值,如max(cname) 查询所有课程成绩小于60分的同学的学号、姓名selectstudent.sno,snamefromstudent,scwherestudent.sno=sc.snogroupbystudent.sno,snamehavingsum(casewhenscore<60then1else0end)=count(*)