数据库上机作业4

来源:互联网 发布:矩阵理论教材推荐 编辑:程序博客网 时间:2024/06/05 02:14
--1. 查询以‘DB_’开头,且倒数第3个字符为‘s’的课程的详细情况;
select Cname from T_Course
where Cname like 'DB_%s__'


--2. 查询名字中第2个字为‘阳’的学生姓名和学号及选修的课程号、课程名;
select sname,T_Student.sno,T_Course.cno,cname 
from T_Student,T_SC,T_Course  
where T_Student.Sname like '_阳%' and T_Student.Sno=T_SC.Sno and T_SC.Cno=T_Course.cno


--3. 列出选修了‘数学’或者‘大学英语’的学生学号、姓名、所在院系、选修课程号及成绩;
select T_Student.Sno,T_Student.Sname,T_Student.Sdept,T_Course.Cno,T_SC.Grade
from T_Student,T_Course,T_SC
where (T_Course.Cname='数学'or T_Course.Cname='大学英语') and T_Student.Sno=T_SC.Sno and T_SC.Cno =T_Course.Cno


--4. 查询缺少成绩的所有学生的详细情况;
select T_Student.Sno,T_Student.Sname,T_Course.Cno,T_Course.Cname,T_SC.Grade
from T_Student,T_Course,T_SC
where T_SC.Grade is null and T_Student.Sno=T_SC.Sno and T_SC.Cno =T_Course.Cno


--5. 查询与‘张力’(假设姓名唯一)年龄不同的所有学生的信息;
select Sno,Sname,Sage,Ssex,Sdept
from T_Student
where Sage <> (select Sage from T_Student where Sname = '张力')


--6. 查询所选课程的平均成绩大于张力的平均成绩的学生学号、姓名及平均成绩;
select T_Student.Sno,Sname,AVG(T_SC.Grade)平均成绩
from T_SC,T_Student
where T_Student.Sno=T_SC.Sno
group by T_student.Sno,T_student.Sname
having AVG(T_SC.Grade)>(select AVG(T_SC.Grade)
from T_Student,T_SC
where T_Student.Sname='张力' and T_Student.Sno=T_SC.Sno )




--7. 按照“学号,姓名,所在院系,已修学分”的顺序列出学生学分的获得情况。其中已修学分为考试已经及格的课程学分之和;
select T_Student.Sno'学号',T_Student.Sname'姓名',T_Student.Sdept'所在院系',sum(T_Course.Ccredit)'已修学分'
from T_Student,T_SC,T_Course
where T_Student.Sno=T_SC.Sno and T_SC.Cno=T_Course.Cno and T_SC.Grade>=60
group by T_Student.Sno,T_Student.Sname,T_Student.Sdept




--8. 列出只选修一门课程的学生的学号、姓名、院系及成绩;
select T_Student.Sno'学号',T_Student.Sname'姓名',T_Student.Sdept'所在院系',T_SC.Grade'成绩'
from T_Student,T_SC
where T_Student.Sno=T_SC.Sno
group by T_Student.Sno,T_Student.Sname,T_Student.Sdept,T_SC.Grade
having count(*) = 1


--9. 查找选修了至少一门和张力选修课程一样的学生的学号、姓名及课程号;
select T_Student.Sno,T_Student.Sname,T_SC.Cno
from T_Student,T_SC
where T_Student.Sno=T_SC.Sno and T_SC.Cno 
in (select distinct T_SC.Cno 
from T_Student,T_SC
where Sname = '张力'
)


--10. 只选修“数据库”和“数据结构”两门课程的学生的基本信息;
select T_Student.Sno,T_Student.Sname
from T_Student,T_SC,T_Course
where T_Student.Sno=T_SC.Sno and T_Course.Cno=T_SC.Cno 
group by T_Student.Sno,T_Student.Sname,T_SC.Sno
having COUNT(*)=2
intersect
    select T_Student.Sno,T_Student.Sname
from T_Student,T_SC,T_Course
where T_Student.Sno=T_SC.Sno and T_Course.Cno=T_SC.Cno and T_Course.Cname='数据结构'
intersect
    select T_Student.Sno,T_Student.Sname
from T_Student,T_SC,T_Course
where T_Student.Sno=T_SC.Sno and T_Course.Cno=T_SC.Cno and T_Course.Cname='数据库'


--11. 至少选修“数据库”或“数据结构”课程的学生的基本信息;
select T_Student.Sno,T_Student.Sname,T_Student.Ssex,T_Student.Sage
from T_Student,T_SC,T_Course
where T_Student.Sno=T_SC.Sno and T_Course.Cno=T_SC.Cno and (T_Course.Cname='数据库' or T_SC.Cno='数据结构')


--12. 列出所有课程被选修的详细情况,包括课程号、课程名、学号、姓名及成绩;
select T_Course.Cno,T_Course.Cname,T_Student.Sno,T_Student.Sname,T_SC.Grade
from T_Course,T_SC,T_Student
where T_Course.Cno=T_SC.Cno and T_SC.Sno=T_Student.Sno


--13. 查询只被一名学生选修的课程的课程号、课程名;
select T_Course.Cno'课程号',T_Course.Cname'课程名'
from T_Course,T_SC
where T_Course.Cno=T_SC.Cno
group by T_SC.Cno,T_Course.Cno,T_Course.Cname
having count(T_SC.Cno)=1


--14. 检索所学课程包含学生‘张向东’所学课程的学生学号、姓名;
select T_Student.Sno,T_Student.Sname
from T_Student,T_SC
where T_Student.Sno=T_SC.Sno and T_SC.Cno
in (select T_SC.Cno
from T_Student,T_SC
where T_Student.Sno=T_SC.Sno and T_Student.Sname='张向东'
)


--15. 使用嵌套查询列出选修了“数据结构”课程的学生学号和姓名;
select distinct T_Student.Sno,T_Student.Sname
from T_Student,T_Course,T_SC
where T_Student.Sno=T_SC.Sno and T_SC.Cno
in (select T_SC.Cno
from T_SC,T_Course
where T_Course.Cno=T_SC.Cno and T_Course.Cname='数据结构'
)


--16. 使用嵌套查询查询其它系中年龄小于CS系的某个学生的学生姓名、年龄和院系;
select T_Student.Sname,T_Student.Sage,T_Student.Sdept
from T_Student
where T_Student.Sdept<>'CS'and T_Student.Sage<any
(select T_Student.Sage
from T_Student
where T_Student.Sdept='CS')


--17. 使用ANY、ALL 查询,列出其他院系中比CS系所有学生年龄小的学生;
select T_Student.Sname,T_Student.Sage,T_Student.Sdept
from T_Student
where T_Student.Sdept<>'CS'and T_Student.Sage<all
(select T_Student.Sage
from T_Student
where T_Student.Sdept='CS')


--18. 分别使用连接查询和嵌套查询,列出与‘张力’在一个院系的学生的信息;
select *
from T_Student
where T_Student.Sdept = (select T_Student.Sdept from T_Student where T_Student.Sname='张力') and T_Student.Sname<>'张力'


select s1.*
from T_Student s1,T_Student s2
where s1.Sno=s2.Sno and s1.Sdept in(select T_Student.Sdept from T_Student where T_Student.Sname='张力') and s1.Sname<>'张力'


--19. 使用集合查询列出CS系的学生以及性别为女的学生名单;
select *
from T_Student where Sdept='CS' union 
select *
from T_Student where Ssex='女';


--20. 使用集合查询列出CS系的学生与年龄不大于19岁的学生的交集、差集;
select *  
from T_Student  
where Sdept='CS' 
intersect select *  
from T_Student 
where Sage!>19


select *
from T_Student 
where Sdept='CS'
except select *
from T_Student
where Sage!>19


--21. 使用集合查询列出选修课程1的学生集合与选修课程2的学生集合的交集;
select distinct T_Student.*
from T_Course,T_SC,T_Student
where T_Student.Sno in(select T_SC.Sno from T_SC where T_SC.Cno ='1') union
select distinct T_Student.*
from T_Course,T_SC,T_Student
where T_Student.Sno in(select T_SC.Sno from T_SC where T_SC.Cno ='2')


--22. 思考题:按照课程名顺序显示各个学生选修的课程(如200515001 数据库 数据结构 数学);
select sno,
case  cname when '数据库' then grade else NULL
end as 数据库,
case  cname when '数据结构' then grade else NULL
end as 数据结构,
case  cname when '数学' then grade else NULL
end as 数学,
case  cname when '人工智能' then grade else NULL
end as 人工智能,
case  cname when '大学英语' then grade else NULL
end as 大学英语,
case  cname when '数据处理' then grade else NULL
end as 数据处理,
case  cname when '操作系统 ' then grade else NULL
end as 操作系统 ,
case  cname when 'PASCAL语言' then grade else NULL
end as PASCAL语言,
case  cname when '计算机网络' then grade else NULL
end as 计算机网络
from T_sc,T_course
where T_sc.cno=T_course.cno
0 0
原创粉丝点击