任课教师:舒挺
《数据库原理及应用》
(2013-2014学年第1学期)
实 验 报 告
学号: 姓名: 班级:
实验二
一、实验目的:
数据库的简单查询和高级查询
本实验的目的是使学生掌握SQL Server查询分析器的使用方法,加深对SQL和SQL语言的查询语句的理解。熟练掌握简单表的数据查询、数据排序和数据连接查询的操作方法,加深SQL语言的嵌套查询语句的理解,熟练掌握数据查询中的分组、统计、计算和集合的操作方法。
二、实验内容:
(一)简单查询操作。该实验包括投影、选择条件表达,数据排序,使用临时表等。
具体完成以下题目,将它们转换为SQL语句表示,在学生选课数据库中实现其数据查询操作。 1. 求数学系学生的学号和姓名 2. 求选修了课程的学生学号
3. 求选修课程号为‘1’的学生号和成绩,并要求对查询结果按成绩的降序排列,如果成绩相同按学号的升序排列。
4. 求选修课程号为‘1’且成绩在80~90之间的学生学号和成绩,并将成绩乘以0.8输出。 5. 求数学系或计算机系姓张的学生的信息。 6. 求缺少了成绩的学生的学号和课程号
(二)连接查询操作。该实验包括等值连接、自然连接、求笛卡儿积、一般连接、外连接、内连接、左连接、右连接和自连接等。
1. 查询每个学生的情况以及他所选修的课程 2. 求学生的学号、姓名、选修的课程及成绩
3. 求选修课程号为‘1’且成绩在90以上的学生学号、姓名和成绩 4. 查询每一门课程的间接先行课(即先行课的先行课)
(三)嵌套查询操作:在SQL Server查询分析器中使用IN、比较符、ANY或ALL和EXISTS操作符进行嵌套查询操作。
具体完成以下各题。将它们用SQL语句表示,在学生选课中实现其数据嵌套查询操作。 1. 求选修了高等数学的学号和姓名
2. 求‘1’课程的成绩高于刘晨的学生学号和成绩
3. 求其他系中比计算机系某一学生年龄小的学生(即年龄小于计算机系年龄最大者的学生) 4. 求其他系中比计算机系学生年龄都小的学生 5. 求选修了‘2’课程的学生姓名 6. 求没有选修‘2’课程的学生姓名 7. 查询选修了全部课程的学生姓名
8. 求至少选修了学号为“95002”的学生所选修全部课程的学生学号和姓名 (四)集合查询和统计查询:
1) 分组查询实验。该实验包括分组条件表达、选择组条件表达的方法。 2) 使用函数查询的实验。该实验包括统计函数和分组统计函数的使用方法。 3) 集合查询实验。该实验并操作UNION、交操作INTERSECT和差操作MINUS的实现方法。 具体完成以下例题,将它们用SQL语句表示,在学生选课中实现其数据查询操作。 1. 求学生的总人数
2. 求选修了课程的学生人数
3. 求课程和选修了该课程的学生人数 4. 求选修超过3门课的学生学号
5. 查询计算机科学系的学生及年龄不大于19岁的学生
6. 查询计算机科学系的学生与年龄不大于19岁的学生的交集 7. 查询计算机科学系的学生与年龄不大于19岁的学生的差集
8. 查询选修课程‘1’的学生集合与选修课程‘2’的学生集合的交集 9. 查询选修课程‘1’的学生集合与选修课程‘2’的学生集合的差集
三、实验方法
将查询需求用SQL语言表示;在SQL Server查询分析器的输入区中输入SQL查询语句;设置查询分析器的结果区为Standard Execute(标准执行)或Execute to Grid(网格执行)方式;发布执行命令,并在结果区中查看查询结果;如果结果不正确,要进行修改,直到正确为止。 所使用的学生管理库中的三张表为:
(1) STUDENT(学生信息表)
SNO(学号) SNAME(姓名) SEX(性别) SAGE(年龄) SDEPT(所在系) 95001 95002 95003 95004 95005 95006 95007 李勇 刘晨 王名 张立 李明 张小梅 封晓文 男 女 女 男 男 女 女 20 19 18 19 22 23 20 CS IS MA IS CS IS MA (2) COURSE(课程表) CNO(课程号) CNAME(课程名) CPNO(先行课) CCREDIT(学分) 1 2 3 4 5 6 7 SNO(学号) 95001 95001 95001 95002 95002 95003 95003 95004 95004 95005 95005 95006 95007
数据库 数学 信息系统 操作系统 数据结构 数据处理 PASCAL语言 5 1 6 7 6 4 2 4 3 4 2 4 Grade(成绩) 92 85 88 90 80 78 80 90 60 80 89 80 65 (3) SC(选修表)
CNO(课程号) 1 2 3 2 3 1 2 1 4 1 3 3 4 四、实验代码及结果
(一)简单查询操作。该实验包括投影、选择条件表达,数据排序,使用临时表等。
具体完成以下题目,将它们转换为SQL语句表示,在学生选课数据库中实现其数据查询操作。 1. 求数学系学生的学号和姓名
相关代码: 查询结果:
2. 求选修了课程的学生学号
相关代码: 查询结果:
分析:通过DISTINCT来去掉重复的查询结果。
3. 求选修课程号为‘1’的学生号和成绩,并要求对查询结果按成绩的降序排列,如果成绩相同按学号的升序排列。
相关代码: 查询结果:
4. 求选修课程号为‘1’且成绩在80~90之间的学生学号和成绩,并将成绩乘以0.8输出。 相关代码: 查询结果:
分析:Grade*0.8用来赋值,Grade用来给出参数名
5. 求数学系或计算机系姓张的学生的信息。 相关代码:
查询结果:
分析:无符合条件的内容,则查询结果为空。
6. 求缺少了成绩的学生的学号和课程号 相关代码: 查询结果:
分析:无符合条件的内容,则查询结果为空。
(二)连接查询操作。该实验包括等值连接、自然连接、求笛卡儿积、一般连接、外连接、内连接、左连接、右连接和自连接等。
1. 查询每个学生的情况以及他所选修的课程 相关代码:
查询结果:
2. 求学生的学号、姓名、选修的课程及成绩 相关代码:
查询结果: