Msql练习(二)

来源:互联网 发布:网络教育报考条件 编辑:程序博客网 时间:2024/06/03 10:23

一共有4张表,分别为学生表(Student)、教师表(Teacher)、课程表(Course)、以及学生课程表(SC)。
表结构如下:
Student(Sno,Sname,Sage,Ssex);
Course(Cno,Cname,Tno,);
SC(Sno,Cno,score);
Teacher(Tno,Tname);

1、查询所有学生的选课情况;
select student.Sname,student.Sno
from student,course,sc
where student.Sno=sc.Sno
and sc.Cno=course.Cno;

2、查询平均成绩大于60分的同学的学号和平均成绩;
select AVG(score),sc.Sno
from sc
group by sc.Sno
HAVING AVG(score)>60;
通过对学号进行分组,然后通过having+分组条件(按照学号进行分组),结合AVG()聚合函数来求出符合要求的元组。

3、查询所有同学的学号、姓名、选课数、总成绩;
select student.sno,student.sname,count(sc.cno),sum(sc.score)
from student
left join sc on student.Sno = sc.Sno
group by student.Sno,student.Sname;
按照学生编号和学生姓名来进行分组,通过左外连接将Student表和SC表关联起来。关联条件为学号相等。

4、查询姓“李”的老师的个数;
select count(distinct(Tname))
from Teacher
where Tname like ‘李%’;
一个简单的模糊查询语句。

5、查询没学过“叶平”老师课的同学的学号、姓名;
select student.Sno,student.Sname
from student
where Sno not IN
(select DISTINCT(sc.Sno)
from sc,course,teacher
where sc.Cno=course.Cno
and teacher.Tno=course.Tno
and teacher.Tname=’叶平’);
首先,查询所有选秀叶平老师课程的学生学号,然后通过 not in 关键字
反向选择不在条件中的元组。

6、查询任何一门课程成绩在70分以上的姓名、课程名称和分数;
select student.Sname,course.Cname,sc.score
from student,course,sc
group by student.Sname
having min(score)>=80;
group by + having + 聚合函数的简单使用。

7、查询不及格的课程,并按课程号从大到小排列
select course.Cno
from course,sc
where sc.score<60;

8、查询课程编号为003且课程成绩在80分以上的学生的学号和姓名;
SELECT student.Sno,student.Sname
FROM student,sc
where sc.Cno=’003’ AND sc.score>80;

9、求选了课程的学生人数
select count(*)
from sc;

10.、查询各个课程及相应的选修人数
select sc.Cno,count(*)
from sc
group by sc.Cno;

0 0