实验目的
1、掌握select语句中嵌套查询的语法结构;
2、熟练select语句中统计函数的作用和使用方法;
3、熟练select语句中GROUP BY和ORDER BY字句的作用和使用方法。
实验内容与步骤
在前面建立的数据库student000的表中进行如下操作:
1、查询选修了3号课程的学生学号和成绩,查询结果按成绩的降序排列;
use 自己的数据库名字
select sno,grade
from sc
where cno = '3'
order by grade desc
2、查询全体学生的情况,查询结果按所在系升序排列,同一个系的学生按年龄降序排列;
use 自己的数据库名字
select *
from Student
ORDER BY sdept, sage DESC;
3、查询学生总人数;
use 自己的数据库名字
select COUNT(*)
from Student;
4、计算1号课程的学生平均成绩;
use 自己的数据库名字
select AVG(grade)
from sc
where cno='1';
5、求各个课程号及其相应的选课人数;
use 自己的数据库名字
select cno,COUNT(sno)
from sc
group by cno;
6、查询选修了2门以上课程的学生学号;
use 自己的数据库名字
select sno
from sc
group by sno
having COUNT(*)>2;
7、查询与刘晨在同一个系学习的学生情况(用IN谓词和自然连接两种方式实现);
IN谓词
use 自己的数据库名字
select sno, sname, sdept
from Student
where sdept in
(select sdept
from Student
where sname= '刘晨');
自然连接
use 自己的数据库名字
select s1.sno, s1.Sname,s1.sdept
from Student s1,Student s2
where s1.sdept = s2.sdept AND
s2.sname = '刘晨';
8、查询选修了高等数学的学生学号和姓名;
use 自己的数据库名字
select Sno,Sname
from Student
where Sno IN
(select Sno
from SC
where Cno IN
(select Cno
from Course
where Cname= '高等数学'
)
);
9、求2号课程的成绩高于李勇任意一门成绩的学生学号和成绩;
use 自己的数据库名字
select sno,grade from sc
where cno='2'
and grade>any(select grade from sc,Student
where sc.sno=Student.sno
and sname='李勇')
10、求其它系中比计算机系中某一学生年龄小的学生情况;
use 自己的数据库名字
select sno from Student
where sage < (select max(sage) from student where sdept = '计算机')
and sdept != '计算机';
11、求其它系中比计算机系学生年龄都小的学生情况;
use 自己的数据库名字
select sname,sage
from Student
where sdept!='计算机' AND
sage<all(select sage from Student where sdept='计算机');
12、求选修了2号课程的学生姓名;
use 自己的数据库名字
select Student.sname
from Student,sc
where sc.cno='2' and sc.sno=Student.sno;
13、求没有选修2号课程的学生姓名;
use 自己的数据库名字
SELECT sname
FROM Student
WHERE NOT EXISTS
(SELECT *
FROM sc
WHERE Student.sno=sc.sno AND cno='2');
14、求选修了全部课程的学生姓名;
use 自己的数据库名字
select Sname
from Student
where not exists(
select *
from course
where not exists(
select *
from sc
WHERE sc.sno = Student.sno AND
sc.cno = course.cno
)
);
15、求至少选修了学号为95002的学生所选修的全部课程的学生学号和姓名。
use 自己的数据库名字
select distinct X.Sno
from sc X
where not exists(
select *
from SC Y
where Y.Sno = 95002
and not exists(
select *
from SC Z
where Z.Cno = Y.Cno AND
Z.Sno = X.Sno
)
);