赞
踩
现有学生信息表s(sNo,sName) 字段含义:学号,姓名
课程表c(cId,cName,teacher) 字段含义:课程号,课程名称,教师名
学生选修课程表sc(sNo,cId,score) 字段含义:学号,课程号,课程成绩。
根据以上表格,进行以下数据查询:
111,查询课程1的成绩比课程2的成绩高的所有学生的学号
答:
select sc1.sNo from sc sc1,sc sc2 where sc1.sNo=sc2.sNo and sc1.cid=1 and sc2.cid=2 and sc1.score>sc2.score
112,查询平均成绩大于60分的同学的学号和平均成绩
答:
select sNo,avg(score) from sc group by sNo having avg(score)>60
113,查询所有同学的学号、姓名、选课数、总成绩
答:
114,查询姓“张”的老师的个数
答:
select count(teacher) from c where teacher like '张%'
115,查询没学过“张三”老师课的同学的学号、姓名
答:思路:先根据张三教师的姓名找到该教师教的课程号,然后再从sc中取出选修过这门课的学生号。最后把这些学生排除出去就得到想要的结果
答:
116,查询同时学过课程1和课程2的同学的学号、姓名
答 :思路:对学号进行分组,那些选修了课程1或2的并且数量正好为2个的必定为同时选修了课程1和2的学生。把他们的学号取出来,从学生表中取出需要的字段即可
117,查询学过“李四”老师所教所有课程的所有同学的学号、姓名
答:思路:先根据教师名字找出该教师所教的全部课程编号
然后根据学号进行分组,找出选修课程号在上面所找出的课程号里,并且数量与课程数量相同的学生学号(思路与上一题同)。再根据这些学号取出学生信息
118,查询课程编号1的成绩比课程编号2的成绩高的所有同学的学号、姓名
答:这一题与第一题一样的。主要是先要确定该学生同时选修了课程1和课程2,然后再比较两门课的成绩。使用了自连接。
119,查询所有课程成绩小于60分的同学的学号、姓名
答:这一题的关键在于要找出那些选修了课程,但所有选修的课程都小于60分的学生。只要有一门及格了就排除在外。可以换个思路,先找出那些有分数大于等于60分的学生号。这些都是不符合要求的,把他们排除在外,剩下的就一定是考试全部不及格的那些人。
120,查询至少有一门课程与学号为1的同学所学课程相同的同学的学号和姓名
答:先找出学号为1的同学选修的课程号,然后找其他同学选修的课程号在1号同学选修的课程号内就可以了。最后别忘了把1号同学自己排除出去。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。