失效链接处理 |
MySQL数据库项目实战 PDF 下载
本站整理下载:
提取码:ed7y
相关截图:
主要内容:
一、设计目的、步骤及要求
1、设计目的
本课程设计是完s成了“MySQL数据库应用技术”课程教学后而进行的一次综合性项目设计,也是对该课程技术应用的一个全面性实践。
本课程设计的基本目的是:
1)系统学习MySQL数据库的建立、管理和操作技术。
2)熟练掌握T-SQL语句的数据查询技术。
3)掌握基于T-SQL语句的编程方法。
4)掌握MySQL数据库备份、导入和导出的方法。
2、设计路线图
3、设计要求
系统环境要求:
1)系统工作环境:Win7
2)数据库服务器环境:MySQL
3)文档编辑环境:Word 2007、Excel 2007和图形编辑软件
设计质量要求:
1)根据要求全面完成数据库文档和数据的创建。
2)数据库设计合理,数据类型选择合适。
3)各数据库对象设计合理,程序代码清晰。
4)为程序提供清晰的注释,以说明代码的基本功能和设计思路,以增强程序的可读性。
5)完成项目设计说明书(2000字左右)。要求:能反映数据库各个对象的基本设计思路,基本功能介绍和实现的核心代码,以及设计心得。
6)设计完成后提交如下文件:
①完整的SQL文件
②课程设计报告书
二、设计内容
1、设计内容
课题:学生信息管理数据库的创建和使用
本课程设计要求完成一个以学生信息数据库为管理对象的数据库设计。
任务一:
1)创建数据库
创建学生信息管理数据库gradem。
CREATE DATABASE gradem;
use gradem;
2)创建数据表
(1)在gradem数据库中创建表1~表5所示结构的表。
表1 student表的表结构
字段名称 数据类型 长度 小数位数 是否允许NULL值 说明
sno char 10 否 主码
sname varchar 8 是
ssex char 3 是
sbirthday datetime 是
saddress varchar 50 是
sdept char 16 是
speciality varchar 20 是
CREATE TABLE student
(
sno char(10) not null,
sname varchar(8),
ssex char(3),
birthday datetime,
saddress varchar(50),
sdept char(16),
speciality varchar(20),
CONSTRAINT pk01 PRIMARY key (sno)
)
表2 course表(课程名称表)的表结构
字段名称 数据类型 长度 小数位数 是否允许NULL值 说明
cno char 5 否 主码
cname varchar 20 否
CREATE TABLE course
(
cno char(5) not null,
cname varchar(20) not null,
CONSTRAINT pk02 PRIMARY key (cno)
)
表3 sc表(成绩表)的表结构
字段名称 数据类型 长度 小数位数 是否允许NULL值 说明
sno char 10 否 组合主码、外码
cno char 5 否 组合主码、外码
degree decimal 是
CREATE TABLE sc
(
sno char(10) not null,
cno char(5) not null,
degree decimal,
CONSTRAINT pk03 PRIMARY key (sno,cno),
CONSTRAINT fk01 FOREIGN key (sno) REFERENCES student (sno),
CONSTRAINT fk02 FOREIGN key (cno) REFERENCES course (cno)
)
表4 teacher表(教师表)的表结构
字段名称 数据类型 长度 小数位数 是否允许NULL值 说明
tno char 3 否 主码
tname varchar 8 是
tsex char 3 是
tbirthday date 是
tdept char 16 是
create TABLE teacher
(
tno char(3) not null,
tname varchar(8),
tsex char(3),
tbirthday date,
tdept char(16),
CONSTRAINT pk04 PRIMARY KEY (tno)
);
表5 teaching表(授课表)的表结构
字段名称 数据类型 长度 小数位数 是否允许NULL值 说明
cno char 5 否 组合主码、外码
tno char 3 否 组合主码、外码
cterm tinyint 0 是
CREATE TABLE teaching
(
cno char(5) not null,
tno char(3) not null,
cterm tinyint,
CONSTRAINT pk05 PRIMARY KEY (cno,tno),
CONSTRAINT fk03 FOREIGN KEY (cno) REFERENCES course (cno),
CONSTRAINT fk04 FOREIGN KEY (tno) REFERENCES teacher(tno)
)
(2) 向表1至表5输入数据记录,见表6~表10。
表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 河北唐山 信息工程系 电子商务
表7 课程关系表course
cno cname cno cname
C01 数据库 C03 信息系统
C02 数学 C04 操作系统
表8 成绩表sc
sno cno degree
20050101 C01 92
20050101 C02 85
20050101 C03 88
20050201 C02 90
20050201 C03 80
表9 教师表teacher
tno tname tsex tbirthday tdept
101 李新 男 1977-01-12 计算机工程系
102 钱军 女 1968-06-04 计算机工程系
201 王小花 女 1979-12-23 信息工程系
202 张小青 男 1968-08-25 信息工程系
表10 授课表teaching
cno tno cterm
C01 101 2
C02 102 1
C03 201 3
C04 202 4
(3) 修改表结构。
① 向student表中增加“入学时间”列,其数据类型为日期时间型。
alter table student add 入学时间 datetime;
② 将student表中的sdept字段长度改为20。
alter TABLE student MODIFY sdept char(20);
③ 将student表中的speciality字段删除。
ALTER TABLE student DROP COLUMN speciality;
④ 删除student表。
DROP TABLE student;
(4) 利用SQL命令(create table、alter table、drop table)完成对表的操作
①利用create talbe 命令完成student表和course表的定义。
CREATE TABLE student
(
sno char(10) not null,
sname varchar(8),
ssex char(3),
birthday datetime,
saddress varchar(50),
sdept char(16),
speciality varchar(20),
CONSTRAINT pk01 PRIMARY key (sno)
)
CREATE TABLE course
(
cno char(5) not null,
cname varchar(20) not null,
CONSTRAINT pk02 PRIMARY key (cno)
)
②利用drop table命令实现(3)中的④。
DROP TABLE student;
(5)对表进行数据的修改操作:
① 向Student表中插入记录("20050203","张静","1981-3-21","女","CS","电子商务")。
INSERT into student (sno,sname,ssex,birthday,saddress,sdept) VALUES
(
20050203,'张静','女','1981-3-21','CS','电子商务'
);
② 插入学号为“20050302”、姓名为“李四”的学生信息。
INSERT into student (sno,sname) VALUES
(
20050302,'李四'
);
③ 将学号为“20050202”的学生姓名改为“张华”,系别改为“CS”,专业改为“多媒体技术”。
UPDATE student SET sname='张华',saddress='多媒体技术' where sno=20050202;
④ 将“李勇”同学的专业改为“计算机信息管理”。
UPDATE student SET sdept='计算机信息管理' WHERE sname='李勇';
任务二:简单数据查询和分组排序
在任务一种建立的gradem数据库中完成下面查询:
简单数据查询:
(1) 查询所有学生的基本信息、所有课程的基本信息和所有学生的成绩信息(用三条SQL语句)。
SELECT * FROM student;
SELECT * FROM course;
SELECT * from sc;
(2) 查询所有学生的学号、姓名、性别和出生日期。
SELECT sno,sname,ssex,birthday from student;
(3) 查询所有课程的课程名称。
SELECT cname from course;
(4) 查询前10门课程的课号及课程名称。
SELECT cno,cname from course;
(5) 查询所有学生的姓名及年龄。
SELECT sname 姓名,year(now())-year(birthday) as 年龄 from student;
(6) 查询所有年龄大于18岁的女生的学号和姓名。
SELECT sno,sname from student WHERE ssex='女' and year(NOW())-year(birthday)>18;
(7) 查询所有男生的信息。
SELECT * from student WHERE ssex='男';
(8) 查询所有任课教师的姓名(tname)和所在系别(tdept)。
SELECT tname,tdept from teacher;
(9) 查询“电子商务”专业的学生姓名、性别和出生日期。
SELECT sname,ssex,birthday from student WHERE sdept='电子商务';
(10) 查询Student表中的所有系名。
SELECT saddress from student;
(11) 查询“C01”课程的开课学期。
SELECT cterm from teaching WHERE cno='C01';
(12) 查询成绩在80~90分之间的学生学号及课号。
SELECT sno,cno from sc WHERE degree>=80 and degree<=90;
(13) 查询在1970年1月1日之前出生的男教师信息。
SELECT * FROM teacher WHERE tbirthday<'1970-01-01' and tsex='男';
(14) 输出有成绩的学生学号。
SELECT degree from sc WHERE degree>0;
(15) 查询所有姓“刘”的学生信息。
SELECT * from student where sname like'刘%';
(16) 查询生源地不是山东省的学生信息。
SELECT * from student where saddress like'山东%';
(17) 查询成绩为79分、89分或99分的记录。
SELECT * from sc where degree in(79,89,99);
(18) 查询名字中第二个字是“小”字的男生的学生姓名和地址。
SELECT sname,saddress from student where sname like'_小';
(19) 查询名称以“计算机”开头的课程名称。
SELECT sdept from student where sdept like'计算机%';
(20) 查询计算机工程系和软件工程系的学生信息。
SELECT * from student where sdept in('计算机工程系','软件工程系');
分组和排序:
(1) 统计有学生选修的课程的门数。
SELECT sno,count(cno) from sc GROUP BY sno;
(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 course.cno,count(*) from course,sc,student where course.cno=sc.cno and student.sno=sc.sno GROUP BY course.cno;
(5)统计每门课程的选课人数和最高分。
SELECT count(sc.cno),max(sc.degree) from sc,course,student where course.cno=sc.cno and student.sno=sc.sno GROUP BY sc.cno ;
(6) 统计每个学生的选课门数和考试总成绩,并按选课门数降序排列。
SELECT count(cno),sum(degree) from sc GROUP BY sno;
(7) 查询选修了3门以上课程的学生学号。
SELECT sno from sc GROUP BY sno having count(sno)>3;
(8) 查询成绩不及格的学生学号及课号,并按成绩降序排列。
SELECT sno,cno from sc where degree<60 ORDER BY desc;
(9) 查询至少选修一门课程的学生学号。
SELECT sno from sc GROUP BY sno HAVING count(sno)>=1;
(10) 统计输出各系学生的人数
SELECT sdept,count(sdept) from student GROUP BY sdept;
(11) 统计各系的男、女生人数。
SELECT ssex,count(ssex) from student GROUP BY ssex;
(12) 统计各班人数。
SELECT sdept,count(sdept) from student GROUP BY sdept;
(13)统计各班男、女生人数。
SELECT ssex,count(ssex) from student GROUP BY ssex;
(14)统计各系的老师人数,并按人数升序排序。
SELECT tdept,count(tdept) from teacher GROUP BY tdept;
(15)统计不及格人数超过10人的课程号。
SELECT cno from sc GROUP BY cno HAVING count(degree<60)>10;
(16)统计选修人数超过10人的课程号。
SELECT cno from sc GROUP BY cno HAVING count(degree<60)>10;
任务三:多表连接查询和嵌套查询
在Gradem数据库中完成下面查询:
多表连接查询:
(1) 查询计算机工程系女学生的学生学号、姓名及考试成绩。
SELECT student.sno,student.sname,degree from student,sc where sdept='计算机工程系' and ssex='女';
(2) 查询“李勇”同学所选课程的成绩。(不考虑重名)
SELECT cno,degree from sc where sno in(SELECT sno from student where sname='李勇');
(3) 查询“李新”老师所授课程的课程名称。
SELECT cname from course where cno in (SELECT cno from teaching where tno in(SELECT tno from teacher where tname='李新'));
(4)查询女教师所授课程的课程号及课程名称。
SELECT cno,cname from course where cno in (SELECT cno from teaching where tno in (SELECT tno from teacher where tsex='女'));
(5) 查询至少选修一门课程的女学生姓名。
SELECT sname from student where ssex='女' and sno in(SELECT sno from sc GROUP BY sno HAVING count(cno)>=1);
(6) 查询姓“王”的学生所学的课程名称。
SELECT cname from course where cno in(SELECT cno from sc where sno in(SELECT sno from student where sname like'王%') );
(7) 查询选修“数据库”课程且成绩在80~90分之间的学生学号及成绩
SELECT sno,degree from sc where degree>=80 and degree<=90 and cno in(SELECT cno from course where cname='数据库');
(8) 查询课程成绩及格的男同学的学生信息及课程号与成绩。
SELECT student.sno,sname,ssex,birthday,saddress,sdept,入学时间,cno,degree from student,sc WHERE student.sno=sc.sno and degree>60 AND ssex='男';
(9) 查询选修“c04”课程的学生的平均年龄。
SELECT AVG(year(NOW())-year(birthday)) as 平均年龄 from student where sno in (SELECT sno from sc WHERE cno='C04');
(10) 查询学习课程名为“数学”的学生学号和姓名。
SELECT sno,sname from student where sno in (SELECT sno from sc where cno in (SELECT cno from course where cname='数学'));
(11) 查询“钱军”教师任课的课程号,选修其课程的学生的学号和成绩。
SELECT sno,degree from sc where cno in (SELECT cno from teaching where tno in (SELECT tno from teacher where tname='钱军'));
(12)查询“钱军”教师任课的课程号,选修其课程的学生的姓名。
SELECT sname from student where sno in (SELECT sno from sc where cno in(SELECT cno from teaching where tno in (SELECT tno from teacher where tname='钱军')));
(13)查询在第3学期所开课程的课程名称及成绩。
SELECT course.cname,sc.degree FROM course,sc WHERE sc.cno=course.cno and course.cno in(SELECT cno from teaching WHERE cterm=3);
(14)查询“c02”号课程不及格的学生信息。
SELECT * FROM student where sno in(SELECT sno from sc WHERE cno='C02' and degree<60);
(15) 查询同时选修了“c04”和“c02”课程的学生姓名和成绩。
SELECT student.sname 姓名,sc.degree 成绩 from student,sc where student.sno=sc.sno and sc.cno='C04' and sc.cno='C02';
嵌套查询:
(1) 查询“李勇”同学所选课程的成绩。
SELECT course.cname,sc.degree FROM sc,course where sc.cno=course.cno and sc.sno in(SELECT sno from student where sname='李勇');
(2) 查询“李新”老师所授课程的课程名称。
SELECT cname from course where cno in(SELECT cno FROM teaching where tno in (SELECT tno FROM teacher WHERE tname='李新'));
(3) 查询女教师所授课程的课程号及课程名称。
SELECT cno,cname from course WHERE cno in (SELECT cno FROM teaching where tno in (SELECT tno FROM teacher WHERE tsex='女'));
(4) 查询姓“王”的学生所学的课程名称。
SELECT cname from course where cno in(SELECT cno FROM sc where sno in (SELECT sno from student WHERE sname LIKE'王%'));
(5) 查询选修“数据库”课程且成绩在80~90分之间的学生学号及成绩。
SELECT sno,degree from sc where degree>=80 and degree<=90 and cno in (SELECT cno from course WHERE cname='数据库');
(6) 查询学习课程名为“数学”的学生学号和姓名。
#SELECT sno,sname from student where sno in(SELECT sno from sc WHERE cno in(SELECT cno from course WHERE cname='数学'));
(7) 查询选修“C04”课程的学生的平均年龄。
SELECT avg(year(NOW())-year(birthday)) 平均年龄 from student WHERE sno in(SELECT sno from sc WHERE cno='C04');
(8) 查询在第3学期所开课程的课程名称及成绩。
SELECT course.cname,sc.degree from course,sc WHERE course.cno=sc.cno and sc.cno in (SELECT cno from teaching WHERE cterm=3);
(9) 查询“钱军”教师任课的课程号,选修其课程的学生的学号和成绩。
SELECT sno,degree from sc where cno in(SELECT cno from teaching where tno in (SELECT tno from teacher WHERE tname='钱军'));
(10) 查询与“李勇”同一个系的同学姓名。
SELECT sname from student WHERE sdept in(SELECT sdept from student WHERE sname='李勇');
(11) 查询学号比“刘晨”同学大,而出生日期比他小的学生姓名。
SELECT sname from student WHERE sno>sno in(SELECT sno from student WHERE sname='刘晨') and birthday>birthday in(SELECT birthday from student WHERE sname='刘晨');
(12) 查询出生日期大于所有女同学出生日期的男同学的姓名及系别。
SELECT sname,sdept from student where ssex='男' and birthday>birthday in (SELECT max(birthday) from student WHERE ssex='女');
(13)查询成绩比该课程平均成绩高的学生的学号及成绩。
SELECT sno,degree from sc GROUP BY cno HAVING degree>degree in (SELECT avg(degree) from sc);
(14) 查询不讲授“C01”课的教师姓名。
SELECT tname from teacher WHERE not tno in(SELECT tno from teaching WHERE cno='C01');
(15) 查询“C02”号课程不及格的学生信息。
SELECT * FROM student WHERE sno in(SELECT sno FROM sc WHERE cno='C02' and degree<60);
(16)查询没有选修“C02”课程的学生学号及姓名。
SELECT * FROM student WHERE not sno in(SELECT sno FROM sc WHERE cno='C02');
任务四:数据库的安全、备份与恢复
(1)利用Navicat图形工具实现下列操作:
① 使用root用户创建aric用户,初始密码设置为abcdef。让该用户对gradem数据库拥有SELECT、UPDATE、DROP权限。
②使用root用户将aric用户的密码修改为123456
任务五:完成课程设计报告
课程设计报告
课程设计报告是有关整个设计过程和设计内容的全面性说明,也是课程设计的总结。
1、课程设计报告的内容
课程设计报告分以下几个主要部分:
概述:主要就课程设计所完成的基本内容进行概要性说明。
步骤:采用图形或文字等方式,整个设计大致的操作过程以及各个过程所要完成的基本任务。
内容:分别报告各个步骤的具体设计内容。包含文字叙述和设计代码。(代码部分应包括相应的文字注释,且用灰色底纹区分于其他文字)
总结:报告本次设计中碰到的问题,解决的方法和个人的感受。
2、课程设计报告的要求
1)报告结构清晰,叙述条理。
2)能综合反映设计的基本思路,基本方法和基本技术。
3)课程设计说明书2000字左右。
3、设计报告书格式
设计报告书采用与本设计指导任务书的页面大小相近的纸张格式进行编辑。
正文,五号宋体,首行缩进2字符。页面设置:每页共36行,每行40个字。
标题小四宋体,加粗。
报告书的结尾附上班级和姓名。
|