《数据库原理与应用》实验报告二答案 下载本文

内容发布更新时间 : 2024/5/26 21:02:59星期一 下面是文章的全部内容请认真阅读。

广东金融学院实验报告

课程名称:数据库原理与应用

实验编号 及实验名称 姓 名 实验地点 指导教师 实验二 SQL使用实验 系 别 6 学 号 实验日期 同组其他成员 班 级 实验时数 成 绩 年 月 日 无 一、实验目的及要求 1、 掌握SQL查询语言的使用。 2、 掌握SQL流程控制语句的使用。 3、 要求独立完成,并记录SQL语句。 二、实验环境及相关情况(包含使用软件、实验设备、主要仪器及材料等) 1、计算机操作系统要求在windows XP以上。 2、并要求SQL Server软件2000以后版本。 三、实验内容及要求 请使用实验指导书中的关系数据库模型完成下面的内容。 1、写出下面SQL语句实现的功能 1)SELECT COUNT(*) AS 信管专业女学生人数 FROM student WHERE mno=‘100165’ AND ssex=‘女’ 查询信管专业女生人数 2)SELECT DISTINCT SUBSTRING(sname,1,1) FROM student 查询学生的姓 3)SELECT sno,sname,ssex,mno FROM student WHERE mno IN (‘100165’,’201148’,’100838’) 查询专业号为‘100165’,’201148’,’100838’的学生学号、姓名、性别专业号 4)CREATE VIEW v_1 AS SELECT ccno,mark FROM student_course WHERE sno =‘100212201’ AND mark >ANY 第 1 页 共2 页

(SELECT mark FROM student_course WHERE sno =‘100212208’ ) 创建一个视图,显示学号为‘100212201’所选修的课程及成绩,要求成绩要比‘100212208’号学生的任一成绩要高。 5)SELECT DISTINCT s.sno,sname,dname FROM student AS s,department AS d, student_course as sc ,major as m WHERE s.mno=m.mno and d.dno=m.dno AND s.sno=sc.sno AND mark <60 查询有不及格成绩的学生的学号、姓名和系名 6)SELECT sno,sname,mname FROM student AS s,major AS m WHERE s.mno=m.mno AND s.sno IN (SELECT DISTINCT sno FROM student_course WHERE mark <60 ) 查询有不及格成绩的学生的学号、姓名和系名 2、根据下面的要求,写出相应的查询语句 1)查询所有男同学的选课情况,要求列出学号、姓名、开课号、分数。 select s.sno,sname,ccno,mark from student as s,student_course as sc where s.sno=sc.sno and ssex='男' 2)创建一个视图显示所有学生的总成绩,最高成绩,要求列出学号、总成绩和最高成绩。 CREATE VIEW V1(sno,sumMark,maxMark) AS SELECT sno,sum(Mark),max(Mark) FROM student_course group by sno 3)查询出姓张的学生或者姓名中带有“秋”的学生 select * from student where sname like'张%'or sname like'%秋%' 4)查询出每门课程的平均分、最低分、最高分 select avg(mark)as'平均分',min(mark)as'最低分',max(mark)as'最高分' from student_course group by ccno 5)查询出平均分大于80分,且至少选修了2门课程的学生学号。 select s.sno from student as s,student_course as sc,course as c,course_class as cc where s.sno=sc.sno and cc.ccno=sc.ccno and c.cno=cc.cno group by s.sno having(avg(mark)>80 and count(*)>=2) 第 2 页 共2 页

6)求选修课程号为’010104’且成绩在90以上的学生学号、姓名和成绩 select s.sno,sname,mark from course as c,student as s,student_course as sc where c.cno='010104' and mark>90 7)创建一个视图显示每一门课程的间接先行课(即先行课的先行课) CREATE VIEW V2 AS select a.cno,a.cname,b.cpno as '先行课的先行课' from course as a,course as b where a.cpno=b.cno 8)求高等数学课程的成绩高于刘晨的学生学号和成绩 /*select s.sno,Mark from student as s,student_course as sc where s.sno=sc.sno and Mark> (select Mark from student as s,student_course as sc,course as c,course_class as cc where s.sno=sc.sno and sc.ccno=cc.ccno and cc.cno=c.cno and s.sname='刘晨' and c.cname='高等数学')*/错误的! select sc1.sno , sc1.mark ,sc1.ccno from student_course sc1,course c,course_class cc where c.cno=cc.cno and cc.ccno=sc1.ccno and c.cname='高等数学' and sc1.mark> (select sc2.mark from student_course sc2,student s where sc2.sno = s.sno and s.sname = '刘晨' and sc2.ccno=sc1.ccno) 9)求其他系中比计算机系某一学生年龄小的学生(即年龄小于计算机系年龄最大者的学生) select s.sno,s.sname,sbirth from student as s,major as m,department d where s.mno=m.mno and m.dno = d.dno and d.dname <> '计算机系' and s.sbirth> (select min(sbirth) from student as s,major as m where s.mno=m.mno and m.mname='计算机科学与技术') 10)被全部学生选修的课程 select cc.ccno from course_class cc where not exists( select * from student_course sc where not exists( select * from student s where cc.ccno = sc.ccno and sc.sno = s.sno)) 3、思考题 如何求出某门课成绩排名第5到第10之间的学生姓名。 CREATE VIEW V3 第 3 页 共2 页