一、资料题 (题数:6,共 100.0 分)
一、创建数据库(2分)
使用SQL语句或者Navicat工具创建一个学生管理系统数据库,要求:数据库名为 myschool+学号最后两位,例如01号同学创建的数据库名应为myschool01。(2.0分)
正确答案
第一空:
create database myschool01;
二、创建数据表(15分)
创建数据表,表的结构如下图表所示:
表1 Student(学生信息表)
字段名 |
字段说明 |
字段类型 |
长度 |
属性 |
Snumber |
学号 |
varchar |
10 |
非空 |
Sname |
姓名 |
varchar |
20 |
非空 |
sex |
性别 |
char |
2 |
非空 |
sid |
身份证号码 |
varchar |
20 |
非空 |
birthday |
出生日期 |
datetime |
允许空 |
|
address |
住址 |
varchar |
30 |
允许空 |
表2 Course(课程信息表)
字段名 |
字段说明 |
字段类型 |
长度 |
属性 |
Cnumber |
课程号 |
varchar |
20 |
非空 |
Cname |
课程名称 |
varchar |
20 |
非空 |
hours |
学时 |
int |
允许空 |
|
credit |
学分 |
decimal(3,1) |
允许空 |
表3 Score(学生成绩表)
字段名 |
字段说明 |
字段类型 |
长度 |
属性 |
Snumber |
学号 |
varchar |
10 |
非空 |
Cnumber |
课程号 |
varchar |
20 |
非空 |
total |
成绩 |
decimal(4,1) |
非空 |
(15.0分)
正确答案
第一空:
create table `student` (
`snumber` varchar(10) not null,
`sname` varchar(20) not null,
`sex` char(2) not null,
`sid` varchar(20) null default null,
`birthday` datetime null default null,
`address` varchar(30) null default null
);
create table `course` (
`cnumber` varchar(20) not null,
`cname` varchar(20) not null,
`hours` int(11) null default null,
`credit` decimal(3, 1) null default null
);
create table `score` (
`snumber` varchar(10) not null,
`cnumber` varchar(20) not null,
`total` decimal(4, 1) not null
);
三、修改表和添加约束(28分)
1、 使用SQL语句,为student添加national(民族)字段,char(10),允许为空。(5分)
2、 使用SQL语句,将student表的birthday字段的字段类型改为date。(5分)
3、 分析以上三张表,确定三张表的主键,分别为三张表添加主键约束。(5分)
4、 请为student表添加默认约束DF_student_national和唯一约束IX_sid。(说明:民族默认值为“汉族”;身份证为唯一值)。(8分)
5、 请为score表添加外键约束FK_snumber、FK_cnumber。(5分)
正确答案
第一空:
alter table student add national char(10) null;
第二空:
alter table student modify birthday date;
第三空:
alter table student add primary key(snumber);
alter table course add primary key(cnumber);
alter table score add primary key(snumber,cnumber);
第四空:
-- 修改默认值
alter table student modify national char(10) character set utf8;
alter table student alter national set default '汉';
-- 添加唯一约束
alter table student modify sid varchar(20) unique;
或者
alter table student add unique(sid);
-- 删除唯一约束
alter table student drop index sid;
第五空:
alter table score add constraint FK_snumber FOREIGN key(snumber) references student(snumber);
alter table score add constraint FK_cnumber FOREIGN key(cnumber) references course(cnumber);
四、添加数据(15分)
请使用SQL语句为三张表添加以下数据。
student表数据
Snumber |
Sname |
Sex |
Sid |
Birthday |
Address |
National |
0102202001 |
朱三贵 |
男 |
440121199911022354 |
1999-11-1 |
21栋207 |
壮族 |
0102202002 |
夏怡芳 |
男 |
440121200010022224 |
2000-10-2 |
21栋209 |
彝族 |
0102202003 |
周敏浩 |
女 |
440223199911280026 |
1999-11-28 |
20栋606 |
汉族 |
0102202004 |
李萌萌 |
女 |
440222199909281124 |
1999-9-28 |
20栋606 |
回族 |
course表数据
Cnumber |
Cname |
Hours |
Credit |
001 |
java面向对象程序设计 |
54 |
3 |
002 |
应用数学1 |
74 |
4 |
003 |
大学英语 |
54 |
3 |
004 |
数据库应用基础 |
54 |
3 |
005 |
网页设计基础 |
72 |
4 |
score表数据
Snumber |
Cnumber |
Total |
0102202001 |
001 |
90 |
0102202001 |
002 |
85 |
0102202001 |
003 |
88 |
0102202002 |
001 |
85 |
0102202002 |
003 |
96 |
0102202003 |
002 |
88 |
0102202004 |
001 |
78 |
0102202004 |
002 |
90 |
正确答案
第一空:
insert into `student` values ('0102202001', '朱三贵', '男', '440121199911022354', '1999-11-01', '21栋207', '壮族');
insert into `student` values ('0102202002', '夏怡芳', '男', '440121200010022224', '2000-10-02', '21栋209', '彝族');
insert into `student` values ('0102202003', '周敏浩', '女', '440223199911280026', '1999-11-28', '20栋606', '汉族');
insert into `student` values ('0102202004', '李萌萌', '女', '440222199909281124', '1999-09-28', '20栋606', '回族');
第二空:
insert into `course` values ('001', 'java面向对象程序设计', 54, 3.0);
insert into `course` values ('002', '应用数学1', 74, 4.0);
insert into `course` values ('003', '大学英语', 54, 3.0);
insert into `course` values ('004', '数据库应用基础', 54, 3.0);
insert into `course` values ('005', '网页设计基础', 72, 4.0);
第三空:
insert into `score` values ('0102202001', '001', 90.0);
insert into `score` values ('0102202001', '002', 85.0);
insert into `score` values ('0102202001', '003', 88.0);
insert into `score` values ('0102202002', '001', 85.0);
insert into `score` values ('0102202002', '003', 96.0);
insert into `score` values ('0102202003', '002', 88.0);
insert into `score` values ('0102202004', '001', 78.0);
insert into `score` values ('0102202004', '002', 90.0);
五、数据导出(5分)
1、 把student表的数据导出到txt文件(路径任意),设置字段间用逗号隔开,字段的值用“”括起来,每一行记录都换行(5.0分)
正确答案
第一空:
select * from myschool01.student
into outfile 'C:\\ProgramData\\MySQL\\MySQL Server 5.7\\Uploads\\bak_myschool_student.txt' character set gbk
fields
terminated by ','
enclosed by '\"'
lines
terminated by '\r\n';
------------------- 或者 ---------------------------
mysqldump -u root -p -T "C:\\ProgramData\\MySQL\\MySQL Server 5.7\\Uploads" myschool01 student --fields-terminated-by=, --fields-optionally-enclosed-by=\" --lines-terminated-by=\r\n
六、SQL语句(35分)
1、创建视图v_stuInfo,显示所有学生的学号、课程名称和成绩(只返回前5行记录)。(5分)
2、查询与“周敏浩”同性别的同学,显示姓名和性别。(5分)
3、查询所有课程的总学分和总学时数。(5分)
4、查询参加了课程号为“001”或“002”考试的学生姓名。(5分)
5、查询每个学生共修了多少学分。(5分)
6、删除学号为“0102202004”的学生成绩。(5分)
7、为course表的字段“cname”创建索引idx_CName,该索引为唯一索引。(5分)
正确答案
第一空:
create view v_stuinfo as select student.snumber,cname,total
from student,course,score
where student.snumber = score.snumber and course.cnumber = score.cnumber limit 5;
第二空:
select sname,sex from student
where sex = (select sex from student where sname = '周敏浩');
第三空:
select sum(credit),sum(hours) from course;
第四空:
select sname
from student where snumber in(select distinct snumber from score where cnumber = '001' or cnumber = '002');
第五空:
select student.snumber,sname,sum(credit)
from student,score,course
where student.snumber = score.snumber and score.cnumber = course.cnumber
group by student.snumber;
第六空:
delete from score where snumber = '0102202004';
第七空:
create unique index idx_cname on course(cname);