收藏 分销(赏)

《数据库原理及应用实验》.doc

上传人:人****来 文档编号:4756452 上传时间:2024-10-12 格式:DOC 页数:35 大小:163KB
下载 相关 举报
《数据库原理及应用实验》.doc_第1页
第1页 / 共35页
《数据库原理及应用实验》.doc_第2页
第2页 / 共35页
点击查看更多>>
资源描述
学院 班级 学号 姓名 《数据库原理与应用实验》 实验报告册 学年 第 学期 学 院: 专 业: 年 级: 姓 名: 学 号: 任课教师: MySQL+Navicat安装步骤与下载地址 百度地址: Navicat配置与简单使用 百度地址: 本文档所书写的代码,为本人纯手工敲打,并且通过软件测试成功,欢迎大家进行学习,如有错误,可联系本人邮箱2960223883@实验一 创建和维护数据库 一、实验目的 (1)掌握在Windows 平台下安装与配置MySQL 5.5 的方法。 (2)掌握启动服务并登录MySQL 5.5 数据库的方法和步骤。 (3)掌握MySQL 数据库的相关概念。 (4)掌握使用Navicat 工具和SQL 语句创建数据库的方法。 (5)掌握使用Navicat 工具和SQL 语句删除数据库的方法。 二、实验要求 (1)学生提前准备好实验报告,预习并熟悉实验步骤; (2)遵守实验室纪律,在规定的时间内完成要求的内容; 三、实验内容及步骤 (1)在Windows 平台下安装与配置MySQL 5.5.36 版。 (2)在服务对话框中,手动启动或者关闭MySQL 服务。 (3)使用Net 命令启动或关闭MySQL 服务。 (4)分别用Navicat 工具和命令行方式登录MySQL。 (5)在my.ini 文件中将数据库的存储位置改为D:\MYSQL\DATA。 (6)创建数据库。 ① 使用Navicat 创建学生信息管理数据库gradem。 ② 使用SQL 语句创建数据库MyDB。 (7)删除数据库。 ① 使用Navicat 图形工具删除gradem 数据库。 ② 使用SQL 语句删除MyDB 数据库。 四、思考题 常见的数据库产品有哪些? 五、实验总结 1、收获 2、存在的问题 实验二 管理表 一、实验目的 (1) 掌握表的基础知识。 (2) 掌握使用Navicat管理工具和SQL语句创建表的方法。 (3) 掌握表的修改、查看、删除等基本操作方法。 二、实验要求 (1)学生提前准备好实验报告,预习并熟悉实验步骤; (2)遵守实验室纪律,在规定的时间内完成要求的内容; 三、实验内容及步骤 (1)在gradem数据库中创建表2.1~表2.5所示结构的表。 表2.1 student表的表结构 字段名称 数据类型 长度 小数位数 是否允许NULL值 说明 sno char 10 否 主码 sname varchar 8 是 ssex char 2 是 sbirthday datetime 是 saddress varchar 50 是 sdept char 16 是 speciality varchar 20 是 表2.2 course表(课程名称表)的表结构 字段名称 数据类型 长度 小数位数 是否允许NULL值 说明 cno char 5 否 主码 cname varchar 20 否 表2.3 sc表(成绩表)的表结构 字段名称 数据类型 长度 小数位数 是否允许NULL值 说明 sno char 10 否 组合主码、外码 cno char 5 否 组合主码、外码 degree decimal 4 1 是 1~100 表2.4 teacher表(教师表)的表结构 字段名称 数据类型 长度 小数位数 是否允许NULL值 说明 tno char 3 否 主码 tname varchar 8 是 tsex char 2 是 tbirthday date 是 tdept char 16 是 表2.5 teaching表(授课表)的表结构 字段名称 数据类型 长度 小数位数 是否允许NULL值 说明 cno char 5 否 组合主码、外码 tno char 3 否 组合主码、外码 cterm tinyint 1 0 是 1~10 (2) 向表2.1至表2.5输入数据记录,见表2.6~表2.10。 表2.6 学生关系表student sno sname ssex sbirthday saddress sdept speciality 20050101 李勇 男 1987-01-12 山东济南 计算机工程系 计算机应用 20050201 刘晨 女 1988-06-04 山东青岛 信息工程系 电子商务 20050301 王敏 女 1989-12-23 江苏苏州 数学系 数学 20050202 张立 男 1988-08-25 河北唐山 信息工程系 电子商务 表2.7 课程关系表course cno cname cno cname C01 数据库 C03 信息系统 C02 数学 C04 操作系统 表2.8 成绩表sc sno cno degree 20050101 C01 92 20050101 C02 85 20050101 C03 88 20050201 C02 90 20050201 C03 80 表2.9 教师表teacher tno tname tsex tbirthday tdept 101 李新 男 1977-01-12 计算机工程系 102 钱军 女 1968-06-04 计算机工程系 201 王小花 女 1979-12-23 信息工程系 202 张小青 男 1968-08-25 信息工程系 表2.10 授课表teaching cno tno cterm C01 101 2 C02 102 1 C03 201 3 C04 202 4 (3)在navicat下修改表结构。 ① 向student表中增加“入学时间”列,其数据类型为日期时间型。 ② 将student表中的sdept字段长度改为20。 ③ 将student表中的speciality字段删除。 ④ 删除student表。 (4) 利用SQL命令(create table、alter table、drop table)完成对表的操作 ①利用create talbe 命令完成student表和course表的定义。 ②利用alter table、drop table命令实现(3)中的所有任务。 四、思考题 (1) 在定义基本表语句时,NOT NULL参数的作用是什么? (2) 主码可以建立在“值可以为NULL”的列上吗? 五、实验总结: 1、收获 2、存在的问题 实验三 简单查询——单表无条件和有条件查询 一、实验目的 (1) 掌握SELECT语句的基本用法。 (2) 使用WHERE子句进行有条件的查询。 (3) 掌握使用IN和NOT IN,BETWEEN…AND和NOT BETWEEN…AND来缩小查询范围的方法。 (4) 利用LIKE子句实现字符串匹配查询。 二、实验要求 1、学生提前准备好实验报告,预习并熟悉实验步骤; 2、遵守实验室纪律,在规定的时间内完成要求的内容; 三、实验内容及步骤 在上次实验建立的Gradem或Gradem1数据库中完成下面查询: (1) 查询所有学生的基本信息、所有课程的基本信息和所有学生的成绩信息(用三条SQL语句)。 SELECT * FROM student; SELECT * FROM course; SELECT * FROM sc; (2) 查询所有学生的学号、姓名、性别和出生日期。 SELECT sno,sname,ssex,sbirthday FROM student; (3) 查询所有课程的课程名称。 SELECT cname FROM course (4) 查询前10门课程的课号及课程名称。 SELECT cno,cname FROM course WHERE cno<=10 (5) 查询所有学生的姓名及年龄。 SELECT sname ,year(now())-year(sbirthday) FROM student; (6) 查询所有年龄大于18岁的女生的学号和姓名。 SELECT sno,sname FROM student WHERE ssex='女'and year(now())-year(sbirthday)>18 (7) 查询所有男生的信息。 SELECT * FROM student,teacher WHERE ssex='男'and tsex='男' (8) 查询所有任课教师的姓名(Tname)和所在系别(Tdept)。 SELECT tname,tdept FROM teacher (9) 查询“电子商务”专业的学生姓名、性别和出生日期。 SELECT sname,ssex,sbirthday FROM student WHERE sdept='电子商务' (10) 查询Student表中的所有系名。 SELECT sdept FROM student (11) 查询“C01”课程的开课学期。 SELECT cterm FROM teaching WHERE cno='c01' (12) 查询成绩在80~90分之间的学生学号及课号。 SELECT sno,cno FROM sc WHERE degree BETWEEN 80 and 90 (13) 查询在1970年1月1日之前出生的男教师信息。 SELECT * FROM teacher WHERE tbirthday<'1970-01-01'and tsex=’男’; (14) 输出有成绩的学生学号。 SELECT sno FROM sc WHERE degree is NOT NULL; (15) 查询所有姓“刘”的学生信息。 SELECT * FROM student WHERE sname LIKE'刘%' (16) 查询生源地不是山东省的学生信息。 SELECT * FROM student WHERE saddress NOT LIKE'山东%' (17) 查询成绩为79分、89分或99分的记录。 SELECT * FROM sc WHERE degree='79' or degree='89' or degree='99' (18) 查询名字中第二个字是“小”字的男生的学生姓名和地址。 SELECT sname,saddress FROM student WHERE ssex='男' and sname LIKE'_小' (19) 查询名称以“计算机_”开头的课程名称。 SELECT cname FROM course WHERE cname LIKE'计算机_' (20) 查询计算机工程系和软件工程系的学生信息。 SELECT * FROM student WHERE sdept='计算机工程系' OR sdept='软件工程系' 四、思考题 1、LIKE的通配符有哪些?分别代表什么含义? 通配符 含义 % 有零个或更多个字符组成的任意字符串 _ 任意单个字符 [ ] 用于指定范围,例如[A ~ F],表示A ~ F范围内的任何单个字符 [ ^ ] 表示指定范围之外的,例如[ ^A ~ F ],表示A ~ F 范围以外的任何单个字符。 2、知道学生的出生日期,如何求出其年龄? SELECT year(now())-year(sbirthday) FROM student; 3、IS能用“=”来代替吗? 不能 is是用来判断null的,比如 remark is null 或者remark is not null =是用来直接比较值的。 4、关键字ALL和DISTINCT有什么不同的含义? ALL表示所有的字段,有重复的2条,2 条都显示, DISTINCT表示如果有重复的,只取一条。 五、实验总结: 1、收获 经过这节数据库课程的学习,我基本上掌握了创建数据库以及对数据库的操作的基础知识。学习了SQL数据库中的增、删、改、查等功能,数据库这门课涉及到以前的知识不多,是一门从头学起的课程,即使基础不是很好,只要认真听讲、复习功课,还是一门比较容易掌握的课。 2、存在的问题 不够熟悉对数据库系统的操作,不会运用快捷键,需要更多的练习和操作。 实验四 简单查询——分组与排序 一、实验目的: (1) 利用GROUP BY子句对查询结果分组。 (2) 利用ORDER BY子句对查询结果排序。 (3) 掌握聚集函数的使用方法。 二、实验要求 1、学生提前准备好实验报告,预习并熟悉实验步骤; 2、遵守实验室纪律,在规定的时间内完成要求的内容; 三、实验内容及步骤 在Gradem或Gradem1数据库中完成下面查询: (1) 统计有学生选修的课程的门数。 SELECT COUNT(DISTINCT cno) FROM course (2) 计算“c01”课程的平均成绩。 SELECT AVG(degree) FROM sc WHERE cno='c01'; (3) 查询选修了“c03”课程的学生的学号及其成绩,查询结果按分数降序排列。 SELECT sno,degree FROM sc WHERE cno='c03' ORDER BY degree DESC; (4) 查询各个课程号及相应的选课人数。 SELECT cno,COUNT(sno) FROM sc GROUP BY cno (5) 统计每门课程的选课人数和最高分。 SELECT COUNT(sno),MAX(degree) FROM sc GROUP BY cno (6) 统计每个学生的选课门数和考试总成绩,并按选课门数降序排列。 SELECT COUNT(sno),sum(degree) FROM sc GROUP BY sno ORDER BY COUNT(sno) DESC; (7) 查询选修了3门以上课程的学生学号。 SELECT sno FROM sc GROUP BY sno HAVING COUNT(cno)>3 (8) 查询成绩不及格的学生学号及课号,并按成绩降序排列。 SELECT sno,cno FROM sc WHERE degree<60 ORDER BY degree DESC (9) 查询至少选修一门课程的学生学号。 SELECT sno FROM sc GROUP BY sno HAVING COUNT(cno)>1 (10) 统计输出各系学生的人数 SELECT sdept ,COUNT(*) FROM student GROUP BY sdept (11) 统计各系的男、女生人数。(两条命令) Select sdept,ssex,count(*) From student Group by sdept ,ssex (12) 统计籍贯的男、女生人数。(两条命令) Select saddress,ssex,count(*) From student Group by saddress ,ssex (13) 统计各系的老师人数,并按人数升序排序。 SELECT tdept ,COUNT(*) FROM teacher GROUP BY tdept ORDER BY COUNT(*) DESC (14) 统计不及格人数超过10人的课程号。 SELECT cno FROM sc GROUP BY cno HAVING COUNT(degree<60)>10 (15)统计选修人数超过10人的课程号。 SELECT cno FROM sc GROUP BY cno HAVING COUNT(*)>10 (16) 查询软件系的男生信息,查询结果按出生日期升序排序,出生日期相同的按地址降序排序。 SELECT * FROM student WHERE ssex='男' and sdept='信息工程系' ORDER BY sbirthday,saddress DESC 四、思考题 (1) 聚集函数能否直接使用在SELECT子句、HAVING子句、WHERE子句、GROUP BY子句中? (2) WHERE子句与HAVING子句有何不同? 五、实验总结: 1、收获 2、存在的问题 实验五 多表查询 一、实验目的 (1) 掌握SELECT语句在多表查询中的应用。 (2) 掌握多表连接的几种连接方式及应用。 二、实验要求 1、学生提前准备好实验报告,预习并熟悉实验步骤; 2、遵守实验室纪律,在规定的时间内完成要求的内容; 三、实验内容及步骤: 在Gradem或Gradem1数据库中完成下面查询: (1) 查询计算机工程系女学生的学生学号、姓名及考试成绩。 SELECT student.sno,sname,sc.degree FROM student,sc WHERE student.sno=sc.sno and student.sdept='计算机工程系' and student.ssex='女'; (2) 查询“李勇”同学所选课程的成绩。(不考虑重名) SELECT sc.degree FROM student,sc WHERE student.sno=sc.sno and student.sname='李勇' (3) 查询“李新”老师所授课程的课程名称。 SELECT ame FROM teacher,teaching,course WHERE teacher.tno=teaching.tno and o=o and teacher.tname='李新' (4) 查询女教师所授课程的课程号及课程名称。 SELECT ame,o FROM teacher,teaching,course WHERE teacher.tno=teaching.tno and o=o and teacher.tsex='女' (5) 查询至少选修一门课程的女学生姓名。 SELECT student.sname FROM student,sc WHERE student.sno=sc.sno AND student.ssex='女' GROUP BY student.sno HAVING COUNT(o)>1 (6) 查询姓“王”的学生所学的课程名称。 SELECT ame FROM student,sc,course WHERE student.sno=sc.sno AND o=o AND sname='王%' (7) 查询选修“数据库”课程且成绩在80~90分之间的学生学号及成绩。 SELECT sc.degree,student.sno FROM student,sc,course WHERE student.sno=sc.sno AND o=o AND cname='数据库' AND degree BETWEEN 80 AND 90 (8) 查询课程成绩及格的男同学的学生信息及课程号与成绩。 SELECT student.*,o,sc.degree FROM student,sc,course WHERE student.sno=sc.sno AND o=o AND degree>60 AND ssex='男' (9) 查询选修“c04”课程的学生的平均年龄。 SELECT AVG(year(NOW())-YEAR(sbirthday)) FROM student,sc,course WHERE student.sno=sc.sno AND o=o AND o='c04' (10) 查询学习课程名为“数学”的学生学号和姓名。 SELECT student.sno,sname FROM student,sc,course WHERE student.sno=sc.sno AND o=o AND cname='数学' (11) 查询“钱军”教师任课的课程号,选修其课程的学生的学号、姓名和成绩。 SELECT o,student.sno,sname,sc.degree FROM teacher,teaching,course,student,sc WHERE teacher.tno=teaching.tno and o=o and o=o and sc.sno=student.sno and teacher.tname='钱军' (12) 查询在第3学期所开课程的课程名称及成绩。 SELECT ame,sc.degree FROM course,sc,teaching WHERE o=o and o=o and cterm='3' (13) 查询“c02”号课程不及格的学生信息。 SELECT student.* FROM student,sc WHERE student.sno=sc.sno and cno='c02' and degree<60 and degree IS NULL (14) 查询软件系成绩在90分以上的学生姓名、性别和课程名称。 SELECT student.sname,ssex,ame FROM student,sc,course WHERE student.sno=sc.sno and o=o and sdept='软件系' AND degree>90 (15) 查询同时选修了“c04”和“c02”课程的学生姓名和成绩。 SELECT student.sname,sc.degree FROM student,sc,course WHERE student.sno=sc.sno and o=o and o ='c04' AND o ='c02' 四、思考题 (1) 指定一个较短的别名有什么好处? 更容易辨识 方便查看 (2) 内连接与外连接有什么区别? 内连接: 只有两个表相匹配的行才能在结果集中出现 外连接: 包括 左外连接(左边的表不加限制) 右外连接(右边的表不加限制) 全外连接(左右两表都不加限制) (3) “=”与IN在什么情况下作用相同? 选值只有一个 五、实验总结 1、收获 经过近一个小时的调试,编写,最终得出结论,并进行书写。使我加深了对mysql进一步学习和认识,更加熟练了对软件的使用,收获颇丰。 2、存在的问题 对于语句的使用略显生疏,需要进一步的练习,加深认识。 实验六 嵌套查询 一、实验目的 (1) 掌握嵌套查询的使用方法。 (2) 掌握相关子查询与嵌套子查询的区别。 (3) 掌握带IN谓词的子查询的使用方法。 (4) 掌握带比较运算符的子查询的使用方法。 二、实验要求 1、学生提前准备好实验报告,预习并熟悉实验步骤; 2、遵守实验室纪律,在规定的时间内完成要求的内容; 三、实验内容及步骤 在Grademanager数据库中完成下面查询: (1) 查询计算机系(CS)学生的学生学号、姓名及考试成绩。 SELECT student.sno,student.sname,SC.degree FROM student,sc WHERE student.sno=sc.sno AND sdept='计算机系' ; (2) 查询“李勇”同学所选课程的成绩。 SELECT sc.degree FROM sc,student WHERE student.sno=sc.sno AND sname='李勇'; (3) 查询“李新”老师所授课程的课程名称。 SELECT ame FROM course,teacher,teaching WHERE teacher.tno=teaching.tno AND o=o AND tname='李新'; (4) 查询女教师所授课程的课程号及课程名称。 SELECT o,ame FROM teaching,teacher,course WHERE teacher.tno=teaching.tno AND o=o AND tsex='女'; (5) 查询姓“王”的学生所学的课程名称。 SELECT ame FROM course,student,sc WHERE student.sno=sc.sno AND o=o AND sname LIKE '王%'; (6) 查询选修“数据库”课程且成绩在80~90分之间的学生学号及成绩。 SELECT sc.sno,sc.degree FROM course,sc WHERE o=o AND ame='数据库' AND degree BETWEEN 80 AND 90; (7) 查询选修“C04”课程的学生的平均年龄。 SELECT AVG((YEAR(CURDATE())-YEAR(student.sbirthday))) AS 选修C04课程的学生平均年龄 FROM student,sc WHERE student.sno=sc.sno AND o='c04' (8) 查询学习课程名为“数学”的学生学号和姓名。 SELECT student.sno,student.sname FROM student,course,sc WHERE student.sno=sc.sno AND o=o AND ame='数学' (9) 查询“钱军”教师任课的课程号,选修其课程的学生的学号和成绩。 SELECT cno,sno,degree FROM sc WHERE cno in(SELECT cno FROM teaching,teacher WHERE teacher.tno=teaching.tno AND tname='钱军') (10) 查询在第3学期所开课程的课程号及成绩。 SELECT cno,degree FROM sc WHERE cno in(SELECT cno FROM teaching WHERE cterm='3') (11) 查询与“李勇”同一个系的同学姓名。 SELECT sname from student WHERE sdept in( SELECT sdept FROM student WHERE sname='李勇') (12) 查询学号比“刘晨”同学大,而出生日期比他小的学生姓名。 SELECT sname from student WHERE sno<ANY(SELECT sno from student WHERE sname='刘晨') and year(sbirthday)>all (SELECT year(sbirthday) from student WHERE sname='刘晨') (13) 查询出生日期大于所有女同学出生日期的男同学的姓名及系别。 select sname,sdept from student where year(sbirthday)>all(select year(sbirthday)from student where ssex='女' ) and ssex='男' (14) 查询成绩比该课程平均成绩高的学生的学号及成绩。 select sno,degree from sc where degree >=(select avg(degree) from student,sc where student.sno=sc.sno) (15) 查询不讲授“C01”课的教师姓名。 select tname from teacher ,teaching where teacher.tno=teaching.tno and cno !='c01' (16) 查询没有选修“C02”课程的学生学号及姓名。 select student.sno,sname from student,sc where student.sno=sc.sno and cno!='C02' (17) 查询选修了“数据库”课程的学生学号、姓名及系别。 select sname,student.sno,sdept from student,sc,course where student.sno=sc.sno and o=o and cname='数据库' (18) 查询“C02”号课程不及格的学生信息。 select * from student,sc where student.sno=sc.sno and cno='c02' and degree<60 四、思考题 (1) 子查询一般分为几种? 4种 (2) 相关子查询的执行过程是什么? 依赖于父查询的查询 五、实验总结 1、收获 进一步的练习了嵌套查询和夺标连接,学到更多的知识,受益良多。 2、 存在的问题 还是不够熟悉,需要进一步的学习和复习 实验七 数据更新 一、实验目的: (1) 掌握利用INSERT命令实现对表数据的插入操作。 (2) 掌握利用UPDATE命令实现对表数据的修改操作。 (3) 掌握利用DELETE命令实现对表数据的删除操作。 二、实验要求 1、学生提前准备好实验报告,预习并熟悉实验步骤; 2、遵守实验室纪律,在规定的时间内完成要求的内容; 三、实验内容及步骤 在Gradem或Gradem1数据库中完成下面操作: 注意:利用SELECT INTO…命令备份Student、SC、Course这3个表,备份表名自定。 (1) 向Student表中插入记录("20050203","张静","1981-3-21","女","CS","电子商务")。 INSERT INTO student(sno,sname,sbirthday,ssex,sdept,speciality) VALUES('20050203','张静','1982-3-21','女','CS','电子商务'); (2) 插入学号为“20050302”、姓名为“李四”的学生信息。 INSERT INTO student(sno,sname) VALUES('20050202','李四'); (3) 把计算机系的学生记录保存到表TS中(TS表已存在,表结构与Student表相同)。 INSERT INTO ts SELECT * FROM student WHERE sdept='计算机' (4) 将学号为“20050202”的学生姓名改为“张华”,系别改为“CS”,专业改为“多媒体技术”。 UPDATE student SET sname='张华',sdept='cs',speciality='多媒体技术' WHERE sno='20050202'; (5) 将“李勇”同学的专业改为“计算机信息管理”。 UPDATE student SET speciality='计算机管理' WHERE sname='李勇'; (6) 把选修了“数据库”课程而成绩不及格的学生的成绩全改为空值(NULL)。 UPDATE SC SET degree='NULL' WHERE cno in(SELECT cno from course WHERE cname='数据库') AND degree<60 (7) 删除学号为“20050302”的学生记录。 DELETE FROM student WHERE sno='20050302' (8) 删除“计算机系”所有学生的选课记录。 DELETE FROM sc WHERE sno in(SELECT sno from student WHERE sdept='计算机系') (9) 删除SC表中尚无成绩的选课记录。 DELETE FROM sc WHERE
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服