文档库 最新最全的文档下载
当前位置:文档库 › 《数据库原理及应用实验》

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

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

《数据库原理与应用实验》

实验报告册

学年第学期

学院:

专业:

年级:

姓名:

学号:

任课教师:

MySQL+Navicat安装步骤与下载地址百度地址:

配置与简单使用百度地址:

本文档所书写的代码,为本人纯手工敲打,并且通过软件测试成功,欢迎大家进行学习,如有错误,可联系本人

实验一创建和维护数据库

一、实验目的

(1)掌握在Windows 平台下安装与配置MySQL 的方法。(2)掌握启动服务并登录MySQL 数据库的方法和步骤。(3)掌握MySQL 数据库的相关概念。

(4)掌握使用Navicat 工具和SQL 语句创建数据库的方法。

(5)掌握使用Navicat 工具和SQL 语句删除数据库的方法。

二、实验要求

(1)学生提前准备好实验报告,预习并熟悉实验步骤;(2)遵守实验室纪律,在规定的时间内完成要求的内容;三、实验内容及步骤

(1)在Windows 平台下安装与配置MySQL 版。

(2)在服务对话框中,手动启动或者关闭MySQL 服务。(3)使用Net 命令启动或关闭MySQL 服务。

(4)分别用Navicat 工具和命令行方式登录MySQL。

(5)在文件中将数据库的存储位置改为D:\MYSQL\DATA。

(6)创建数据库。

①使用Navicat 创建学生信息管理数据库gradem。

②使用SQL 语句创建数据库MyDB。

(7)删除数据库。

①使用Navicat 图形工具删除gradem 数据库。

②使用SQL 语句删除MyDB 数据库。

常见的数据库产品有哪些

五、实验总结

1、收获

2、存在的问题

实验二管理表

一、实验目的

(1) 掌握表的基础知识。

(2) 掌握使用Navicat管理工具和SQL语句创建表的方法。

(3) 掌握表的修改、查看、删除等基本操作方法。

二、实验要求

(1)学生提前准备好实验报告,预习并熟悉实验步骤;

(2)遵守实验室纪律,在规定的时间内完成要求的内容;

三、实验内容及步骤

(1)在gradem数据库中创建表~表所示结构的表。

表 student表的表结构

表 course表(课程名称表)的表结构

表 sc表(成绩表)的表结构

表 teaching表(授课表)的表结构

(2) 向表至表输入数据记录,见表~表。

表课程关系表course

表成绩表sc

表教师表teacher

表授课表teaching

(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) 查询计算机工程系和软件工程系的学生信息。

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、存在的问题

不够熟悉对数据库系统的操作,不会运用快捷键,需要更多的练习和操作。

实验四简单查询——分组与排序

一、实验目的:

(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) 统计各系的男、女生人数。(两条命令)

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 ,sname,

FROM student,sc

WHERE = and ='计算机工程系' and ='女';

(2)查询“李勇”同学所选课程的成绩。(不考虑重名)

SELECT

FROM student,sc

WHERE = and ='李勇'

(3)查询“李新”老师所授课程的课程名称。

SELECT

FROM teacher,teaching,course

WHERE = and = and ='李新'

(4)查询女教师所授课程的课程号及课程名称。

SELECT ,

FROM teacher,teaching,course

WHERE = and = and ='女'

(5)查询至少选修一门课程的女学生姓名。

SELECT

FROM student,sc

WHERE = AND ='女'

GROUP BY

HAVING COUNT>1

(6)查询姓“王”的学生所学的课程名称。

SELECT

FROM student,sc,course

WHERE = AND = AND sname='王%'

(7)查询选修“数据库”课程且成绩在80~90分之间的学生学号及成绩。

SELECT ,

FROM student,sc,course

WHERE = AND = AND cname='数据库'

AND degree BETWEEN 80 AND 90

(8)查询课程成绩及格的男同学的学生信息及课程号与成绩。

SELECT student.*,,

FROM student,sc,course

WHERE = AND =

AND degree>60 AND ssex='男'

(9)查询选修“c04”课程的学生的平均年龄。

SELECT AVG(year(NOW())-YEAR(sbirthday))

FROM student,sc,course

WHERE = AND = AND ='c04'

(10)查询学习课程名为“数学”的学生学号和姓名。

SELECT ,sname

FROM student,sc,course

WHERE = AND = AND cname='数学'

(11)查询“钱军”教师任课的课程号,选修其课程的学生的学号、姓名和成绩。

SELECT ,,sname,

FROM teacher,teaching,course,student,sc

WHERE = and = and =

and = and ='钱军'

(12)查询在第3学期所开课程的课程名称及成绩。

SELECT ,

FROM course,sc,teaching

WHERE = and =

and cterm='3'

(13)查询“c02”号课程不及格的学生信息。

SELECT student.*

FROM student,sc

WHERE = and cno='c02' and degree<60 and degree IS NULL

(14)查询软件系成绩在90分以上的学生姓名、性别和课程名称。

SELECT ,ssex,

FROM student,sc,course

WHERE = and = and sdept='软件系' AND degree>90

(15)查询同时选修了“c04”和“c02”课程的学生姓名和成绩。

SELECT ,

FROM student,sc,course

WHERE = and = and ='c04' AND ='c02'

四、思考题

(1) 指定一个较短的别名有什么好处

更容易辨识

方便查看

(2) 内连接与外连接有什么区别

内连接: 只有两个表相匹配的行才能在结果集中出现

外连接: 包括

左外连接(左边的表不加限制)

右外连接(右边的表不加限制)

全外连接(左右两表都不加限制)

(3) “=”与IN在什么情况下作用相同

选值只有一个

五、实验总结

1、收获

经过近一个小时的调试,编写,最终得出结论,并进行书写。使我加深了对mysql进一步学习和认识,更加熟练了对软件的使用,收获颇丰。

2、存在的问题

对于语句的使用略显生疏,需要进一步的练习,加深认识。

相关文档