《2022年数据库实验四作业及答案整理 .pdf》由会员分享,可在线阅读,更多相关《2022年数据库实验四作业及答案整理 .pdf(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、实验 4数据查询一、实验目的1.掌握使用Transact-SQL的 SELECT 语句进行基本查询的方法。2.掌握使用SELECT语句进行条件查询的方法。3.掌握嵌套查询的方法。4.掌握多表查询的方法。5.掌握 SELECT语句的 GROUP BY 和 ORDER BY 子句的作业和使用方法。6.掌握联合查询的操作方法。7.掌握数据更新语句INSERT INTO、UPDATE 、DELETE的使用方法。二、实验准备1.了解 SELECT语句的基本语法格式和执行方法。2.了解嵌套查询的表示方法。3.了解 UNION运算符的用法。4.了解 SELECT语句的 GROUP BY 和 ORDER BY
2、 子句的作用。5.了解 IN、JOIN 等子查询的格式。6.了解 INSERT INTO 、 UPDATE 、DELETE的格式与作用。三、实验内容及步骤0. 创建 studentsdb数据库及其相应表,并录入数据。启动查询分析器,运行下面链接的代码即可。创建数据库代码1.在 studentsdb数据库中,使用下列SQL语句将输出什么?(1)SELECT COUNT(*) FROM grade (2)SELECT SUBSTRING( 姓名 ,1,2) FROM student_info(3)SELECT UPPER(kelly) 名师资料总结 - - -精品资料欢迎下载 - - - - -
3、- - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 8 页 - - - - - - - - - (4)SELECT Replicate(kelly,3) (5)SELECT SQRT( 分数 ) FROM grade WHERE 分数 =85 (6)SELECT 2,3,POWER(2,3) (7)SELECT YEAR(GETDATE(),MONTH(GETDATE(),DAY(GETDATE()2.在 studentsdb数据库中使用SELECT语句进行基本查询。(1)在 student_info表中,查询每个学生的学号、姓名、出生
4、日期信息。SELECT * FROM student_info (2)查询学号为0002 的学生的姓名和家庭住址。SELECT 姓名 , 家庭住址 FROMstudent_info WHERE学号 =0002 (3)找出所有男同学的学号和姓名。SELECT 学号 , 姓名 FROMstudent_info 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 8 页 - - - - - - - - - WHERE 性别 = 男 3.使用 SELECT 语句进行条件查询(1)在
5、grade 表中查找分数在8090 分为内的学生的学号和分数。SELECT 学号 , 分数 FROM grade WHERE 分数 BETWEEN 80 AND 90 (2)在 grade 表中查询课程编号为0003 的学生的平均分。SELECT AVG( 分数 ) AS平均分 FROMgrade WHERE 课程编号 =0003 (3)在 grade 表中查询学习各门课程的人数。SELECT 课程编号 , COUNT(*)AS 人数FROMgrade GROUPBY课程编号(4)将学生按出生日期由大到小排序。SELECT 学号 , 姓名 , 出生日期FROMstudent_info ORDE
6、RBY出生日期ASC 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 8 页 - - - - - - - - - (5)查询所有姓“张”的学生的学号和姓名。 SELECT 学号 , 姓名 FROM student_info WHERE 姓名 LIKE 张% 4.嵌套查询(1)在 student_info表中查找与“刘卫平”性别相同的所有学生的姓名、出生日期。 SELECT 姓名 , 出生日期FROM student_infoWHERE 性别 = (SELECT 性别 FR
7、OM student_info WHERE 姓名 = 刘卫平 ) (2)使用 IN 子查询查找所修课程编号为0002、0005 的学生学号、姓名、性别。SELECT 学号 , 姓名 , 性别FROM student_infoWHERE student_info.学号 IN (SELECT 学号 FROM grade WHERE 课程编号 IN (0002, 0005) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 8 页 - - - - - - - - - ( 3)列出
8、学号为0001 的学生的分数比0002 号的学生的最低分数高的课程编号和分数。SELECT 课程编号 , 分数 FROMgrade WHERE 学号 =0001AND分数 ANY ( SELECT 分数 FROMgradeWHERE 学号 =0002) (4)列出学号为0001 的学生的分数比0002 的学生的最高成绩还要高的课程编号和分数。SELECT 课程编号 , 分数FROMgrade WHERE 学号 =0001AND分数 ALL ( SELECT 分数FROMgrade WHERE 学号 =0002) 5.多表查询(1)查询分数在8090 范围内的学生的学号、姓名、分数。 SELEC
9、T student_info.学号 , 姓名 , 分数FROM student_info,gradeWHERE student_info.学号 =grade. 学号 AND 分数 BETWEEN 80 AND 90 (2)查询学习“ C语言程序设计”课程的学生的学号、姓名、分数。SELECT student_info.学号 , 姓名 , 分数FROM student_infoINNER JOIN grade ON student_info.学号 =grade. 学号INNER JOIN curriculum ON 课程名称 =C 语言程序设计 名师资料总结 - - -精品资料欢迎下载 - -
10、- - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 8 页 - - - - - - - - - (3)查询所有男同学的选课情况,要求列出学号、姓名、课程名称、分数。selectstudent_info. 学号 , 姓名 , 课程编号 , 分数from student_infoleftouterjoingradeon student_info. 学号 =grade. 学号where 性别 = 男 (4)查询每个学生的所选课程的最高成绩,要求列出学号、 姓名、课程名称、 分数。selectgrade. 学号 , student_
11、info. 姓名 , grade. 课程编号 , grade. 分数from student_infoleftouterjoingradeon student_info. 学号 =grade. 学号where grade. 分数 =( selectMAX( 分数 ) fromgradeb where b. 学号 =grade. 学号 ) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 8 页 - - - - - - - - - (5)查询所有学生的总成绩,要求列出学号、姓
12、名、总成绩,没有选修课程的学生的总成绩为空。提示: 使用左外连接。selectgrade. 学号 , 姓名 , sum( 分数 )from student_infoleftouterjoingradeon student_info. 学号 =grade. 学号groupbygrade. 学号 , 姓名(6)为 grade 表添加数据行:学号0004、课程编号为0006、成绩为 76。查询所有课程的选修情况,要求列出课程编号、课程名称、选修人数,curriculum表中没有的课程列值为空。提示: 使用右外连接。insertgradevalues( 0004, 0006, 76) selectgr
13、ade. 课程编号 , 课程名称 , count(*)from graderightouterjoincurriculum on grade. 课程编号 =curriculum. 课程编号groupbygrade. 课程编号 , 课程名称6.使用 UNION运算符将student_info表中姓“张”的学生的学号、姓名与curriculum表的课程编号、课程名称返回在一个表中,且列名为u_编号、 u_名称,如图1-8 所示。select 学号 u_编号 ,姓名u_名称from student_info where 姓名 like 张% union select 课程编号 ,课程名称from c
14、urriculum 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 8 页 - - - - - - - - - 图 1-8 联合查询结果集7.数据更新(1)创建 totalgrade表,具有数据列:学号、姓名、总成绩。 CREATE TABLE totalgrade( 学号 char(4) NOT NULL,姓名 varchar(8) NULL,总成绩 decimal(5,2) NULL )(2)使用 INSERT INTO语句通过student_info表更新 tota
15、lgrade表的学号、姓名列数据。 INSERT INTO totalgrade SELECT 学号 , 姓名 , 总成绩 =0 FROM student_info(3)使用UPDATE语句通过grade表更新totalgrade表的中成绩列数据,使totalgrade表中每个学生的总分成绩为grade 表中该学生各成绩之和。UPDATE totalgrade SET 总成绩 = (SELECT SUM( 分数 ) FROM grade WHERE totalgrade.学号 =grade. 学号 )FROM grade(4)删除 totalgrade表中没有总成绩的学生记录。 delete from totalgrade where 总成绩 is null四、实验思考1 查询所有没有选修课程的学生信息,返回结果包括学号、姓名、性别。2 在 student_info 表和 grade 表之间实现交叉连接。3 查询每个学生的所选课程的成绩,并列出学号生成分组汇总(总成绩)和明细行(各课成绩)。提示: 使用 SELECT 语句的 COMPUTE 选项。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 8 页 - - - - - - - - -