数据库实验七
2014-04-23 17:58阅读:
1.查询至少有一门成绩在80~90之间的学生记录。
2.查询至少有4个同学选修的课程名。
3.查询其他系中比“信息”系所有学生年龄都大的学生名单及年龄,并按年龄降序输出。
4.查询与学生张建国同岁的所有学生的学号,姓名和系别。
5.查询选修了2门以上课程的学生名单。
6.查询至少有一门与“张建国”选课相同的学生的姓名、课程名和系别。
7.查询成绩比该课程平均成绩高的学生的成绩表。
8.查询选修课号为“01001”课程且成绩高于课程“01002”学生的姓名、此两门课程的课程名和成绩。
9.查询所有未修“01001”号课程的学生名单。
11.查询每门课程的课程号、任课教师姓名及其选课人数。
12.查询所有比“刘伟”工资高的教师姓名、工资和刘伟的工资。
13.查询同时选修了“程序设计”和“微机原理”的学生姓名、课程名。
14.查询所有学生的学号、姓名、选课名称及成绩(没有选课的同学的选课信息显示为空)。
15.查询选修了“C1”,且成绩大于等于90分的学生的学号、姓名和成绩。
16.查询成绩大于等于90分的学生的学号、姓名、课程名称和成绩。
use sjksy
-- 1.查询至少有一门成绩在80~90之间的学生记录。
select distinct S.* from S join SC on S.sno=SC.sno
where SC.score between 80 and 90
--2.查询至少有4个同学选修的课程名。
select cname as 至少有4个同学选修的课程名
from C
where C.cno=(
select cno
from SC
group by cno having count(*)>=4)
-- 3.查询其他系中比“信息”系所有学生年龄都大的学生名单及年龄,并按年龄降序输出。
select S.sname a
s 姓名, S.sage as 年龄
from S
where S.sdept<>' 信息' AND sage>
(
SELECT max(sage)
from S
where S.sdept=' 信息')
order by sage desc
--4.查询与学生张建国同岁的所有学生的学号,姓名和系别。
select sno as 学号,sname as 姓名,sdept as 系别
from S
where sage =
(select sage from S where S.sname ='吴丽'
)
--5.查询选修了2门以上课程的学生名单。
select distinct S.* FROM S,SC
where S.sno in
(
select SC.sno
from SC
group by SC.sno
having COUNT(*)>2
)
--6.查询至少有一门与“张建国”选课相同的学生的姓名、课程名和系别。
select distinct S.sname as 姓名, cname as 课程名,S.sdept as 系别
from S ,SC,C
where C.cno IN
(
select SC.cno FROM SC where SC.sno =
(
select S.sno FROM S where
S.sname='李思'
)
)
-- 7.查询成绩比该课程平均成绩高的学生的成绩表。
select S.sno as 学号,sname as 姓名 ,score as 成绩
from S,SC
where score >
(
select avg(score)
from SC
WHERE cno ='C1'
group by cno
)
AND S.sno =SC.sno
-- 8.查询选修课号为“01001”课程且成绩高于课程“01002”学生的姓名、此两门课程的课程名和成绩。
select S.sname as 姓名, C.cname as 课程名, SC.score as 成绩
from S,SC,C
where S.sno IN
(
SELECT SC1.sno FROM SC sc1, SC sc2
where sc1.score>sc2.score and sc1.sno = sc2.sno
and sc1.cno='C1'AND sc2.cno='C2'
)
and S.sno = SC.sno AND SC.cno = C.cno
-- 9.查询所有未修“01001”号课程的学生名单。
SELECT DISTINCT S.* FROM S
WHERE S.sno NOT IN
(
SELECT SC.sno FROM SC WHERE SC.cno='C1'
)
--10.查询所有选课学生的学号、姓名、选课名称及成绩。
SELECT S.sno AS 学号, S.sname as 姓名, c.cname as 课程名, sc.score
as 成绩
FROM S,C,SC
where sc.sno = s.sno and c.cno =sc.cno
--12.查询所有比“刘伟”工资高的教师姓名、工资和刘伟的工资。
select tname as 姓名, T.salary as 工资
from T
where T.tno in (
select T.tno where t.salary>=
(select T.salary from T where T.tname='刘伟' ))
--13.查询同时选修了“程序设计”和“微机原理”的学生姓名、课程名。
select s.sname as 姓名, C.cname as 课程名
from S,C,SC
WHERE S.sno=SC.sno AND SC.cno=C.cno AND
S.sno IN(
SELECT SC1.sno FROM SC SC1 ,SC SC2 WHERE
SC1.cno IN
(SELECT C.cno from C WHERE C.cname='程序设计' ) AND
SC2.cno IN
(SELECT C.cno from C WHERE C.cname='微机原理')
AND
SC1.sno =SC2.sno
)
--14.查询所有学生的学号、姓名、选课名称及成绩(没有选课的同学的选课信息显示为空)。
SELECT S.sno AS 学号, S.sname as 姓名, c.cname
as 课程名, sc.score as 成绩
from S LEFT OUTER JOIN SC ON (S.sno=SC.sno) LEFT OUTER JOIN
C ON (SC.cno =C.cno)
GROUP BY S.sno , S.sname , c.cname , sc.score
--15.查询选修了“C1”,且成绩大于等于90分的学生的学号、姓名和成绩。
select S.sno AS 学号, S.sname as 姓名, sc.score as
成绩
from S,SC
where sc.cno='C1' AND SC.score>90 AND SC.sno =S.sno
--16.查询成绩大于等于90分的学生的学号、姓名、课程名称和成绩。
SELECT S.sno AS 学号, S.sname as 姓名, c.cname
as 课程名, sc.score as 成绩
FROM S,SC,C
where SC.cno=C.cno AND SC.score>=90 AND SC.sno
=S.sno