
数据库原理与应用实验作业参考答案.docx
7页本文格式为Word版,下载可任意编辑数据库原理与应用实验作业参考答案 数据库原理与应用测验报告参考答案 测验1 数据库的建立修改与删除 测验2 表布局的建立修改删除及完整性约束条件定义 测验3 数据查询与更新 (一) 规定内容 1. 单表查询 USE ST --[3_1] 查询全体学生的细致记录 select * from student --[3_2] 查询选修了课程的学生学号 SELECT DISTINCT sno FROM sc --[3_3] 将“学生”表中的sno、sname这2列合并为1列snosname输出(不变更表中存储的内容),其余列不变 select sno+sname snosname,ssex,sage,sdept from student --[3_4] 查询年龄不在20~23岁之间的学生姓名、系别和年龄 方法1: SELECT sname,sdept,sage FROM student WHERE sage NOT BETWEEN 20 AND 23; 方法2: SELECT sname,sdept,sage FROM student WHERE sage23; --[3_5] 查询计算机科学系(cs)、数学系(ma)和信息系(is)学生的姓名和性别。
SELECT sname,ssex FROM student WHERE sdept IN ( 'cs','ma','is' ); --[3_6] 查询全体姓“刘”学生的姓名、学号和性别 SELECT sname,sno,ssex FROM student WHERE sname LIKE '刘%'; --[3_7] 查询名字中第2个字为\阳\字的学生的姓名和学号 SELECT sname,sno FROM student WHERE sname LIKE '_阳%'; --[3_8] 某些学生选修课程后没有加入考试,所以有选课记录,但没有考试劳绩 1 --查询缺少劳绩的学生的学号和相应的课程号 SELECT sno,cno FROM sc WHERE grade IS NULL; --[3_9] 查询计算机系年龄在20岁以下的学生姓名 SELECT sname FROM student WHERE sdept='cs' AND sage=3 --也可为:COUNT(cno)>=3 --[3_19] 查询有2门以上课程是80分以上的学生的学号及(80分以上的)课程数 SELECT sno 学号,COUNT(*) '80分以上的课程数' FROM sc WHERE grade>=80 GROUP BY sno HAVING COUNT(*)>=2 2. 连接查询 --自然连接 --[3_20] 查询每个学生的学号、姓名、课号及劳绩。
SELECT student.sno,sname,cno,grade FROM student,sc WHERE student.sno = sc.sno --左外连接 --[3_21] 查询每个学生的学号、姓名、课号及劳绩(包括没有选修课程的学生) 方法1: SELECT student.sno,sname,cno,grade FROM student,sc where student.sno *= sc.sno 方法2: SELECT student.sno,sname,cno,grade FROM student LEFT JOIN sc ON student.sno = sc.sno 运行结果: sno sname cno grade --------- -------- ---- ------- 202215121 李勇 1 97.0 202215121 李勇 2 40.0 202215121 李勇 3 93.0 202215122 刘晨 2 95.0 202215122 刘晨 3 55.0 202215123 王敏 NULL NULL 202215124 张立 NULL NULL --[3_22] 查询全体学生选修课程的劳绩。
包括没有选课的学生列出学号、姓名、课号、课名、劳绩 SELECT student.sno,sname,o,cname,grade FROM sc JOIN course ON o=o RIGHT JOIN student ON student.sno = sc.sno 运行结果: sno sname cno cname grade --------- -------- ---- ---------------- ------- 202215121 李勇 1 数据库 97.0 202215121 李勇 2 数学 40.0 202215121 李勇 3 信息系统 93.0 3 202215122 刘晨 2 数学 95.0 202215122 刘晨 3 信息系统 55.0 202215123 王敏 NULL NULL NULL 202215124 张立 NULL NULL NULL --自身连接: 一个表与其自己举行连接,称为表的自身连接 --[3_23] 查询每一门课的间接先修课(即先修课的先修课) SELECT FIRST.cno 课号,SECOND.cpno 间接先修课 FROM course FIRST,course SECOND WHERE FIRST.cpno = SECOND.cno --复合条件连接 --[3_24] 查询选修2号课程且劳绩在90分以上的全体学生的学号、姓名。
SELECT student.sno, sname FROM student,sc WHERE student.sno = sc.sno /* 连接谓词*/ AND o='2' AND sc.grade > 90 /* 其他限定条件*/ --多表连接 --[3_25] 查询每个学生的学号、姓名、课名及劳绩 SELECT student.sno,sname,cname,grade FROM student,sc,course WHERE student.sno = sc.sno and o = o 运行结果: sno sname cname grade --------- -------- ---------------- ----- 202215121 李勇 数据库 97.0 202215121 李勇 数学 40.0 202215121 李勇 信息系统 93.0 202215122 刘晨 数学 95.0 202215122 刘晨 信息系统 55.0 3. 嵌套查询 --[3_26] 查询与“刘晨”在一个系学习的学生。
--方法1: 不相关子查询(子查询的查询条件不凭借于父查询) select sno,sname,sdept from student where sdept in --当内查询结果最多只有一个值时可用=代替in (select sdept from student where sname='刘晨') --[3_27] 查询全体姓名一致的学生 --方法1: 不相关子查询(子查询的查询条件不凭借于父查询) select * from student where sname in (select sname from student group by sname having count(*)>1) 4 order by sname,sno --[3_28] 查询选修了课程名为“信息系统”的学生学号和姓名 --方法1:用嵌套查询(不相关子查询) SELECT sno,sname --③结果在sudent关系中取出Sno和Sname FROM student WHERE sno IN (SELECT sno --②然后在sc中找出选修了“信息系统”所在课号的学生学号 FROM sc WHERE cno IN (SELECT cno --①首先在curse关系中找出“信息系统”的课程号 FROM course WHERE cname='信息系统')) --[3_29] 找出每个学生超过他选修课程平均劳绩的学号、课号及劳绩。
SELECT x.* FROM sc x WHERE grade>=(SELECT AVG(grade) FROM sc y WHERE y.sno=x.sno) 运行结果: sno cno grade --------- ---- ------- 202215121 1 97.0 202215121 3 93.0 202215122 2 95.0 --[3_30] 查询其他系中比计算机科学系某一学生年龄小的学生学号、姓名和年龄 --方法1:用any谓词 select sname,sage from student where sage where sdept='cs') and sdept'cs' /* 注意这是父查询块中的条件*/ --[3_31] 查询其他系中比计算机科学系所有学生年龄都小的学生学号、姓名和年龄 select sname,sage from student where sage where sdept='cs') and sdept'cs' --[3_32] 查询全体选修了1号课程的学生学号、姓名。
SELECT sno,sname FROM student WHERE EXISTS 。
