数据库原理及安全技术教学实验报告SQL实践(一)
目录
1.在SQL Server中使用对象资源管理器和SQL命令创建学生作业管理数据库,数据库的名称自定。
2.对表3.6,表3.7和表3.8,分别以下表的方式给出各字段的属性定义和说明。
3.使用SQL命令在学生作业管理数据库中建立学生表、课程表和学生作业表,在实验报告中给出SQL代码。
4.在各个表中输入表3.6、表3.7和表3.8中的相应内容。
5..进行以下的查询操作(每一个查询都要给出SQL语句,列出查询结果)。
1.在SQL Server中使用对象资源管理器和SQL命令创建学生作业管理数据库,数据库的名称自定。
2.对表3.6,表3.7和表3.8,分别以下表的方式给出各字段的属性定义和说明。
3.使用SQL命令在学生作业管理数据库中建立学生表、课程表和学生作业表,在实验报告中给出SQL代码。
4.在各个表中输入表3.6、表3.7和表3.8中的相应内容。
5.进行以下的查询操作(每一个查询都要给出SQL语句,列出查询结果)。
一、实验目的
1.掌握在SQL Server中使用对象资源管理器和SQL命令创建数据库与修改数据库的方法、创建数据表和修改数据表的方法。
2.掌握在SQL Server中使用对象资源管理器或者SQL命令创建数据表和修改数据表的方法(以SQL命令为重点)。
3.掌握无条件查询、条件查询、库函数及汇总查询、分组查询、查询的排序、连接查询的使用方法。
二、实验软硬件要求
1、SQL Server 2008
三、实验预习
建库、建表、表约束、数据插入、单表查询、表连接等SQL语句。
四、实验内容(实验步骤、测试数据等)
给定如表3.6、表3.7和表3.8所示的学生信息。
表3.6 学生表S
学号 | 姓名 | 性别 | 专业班级 | 出生日期 | 联系电话 |
0433 | 张艳 | 女 | 生物04 | 1986-9-13 | |
0496 | 李越 | 男 | 电子04 | 1984-2-23 | 1381290×××× |
0529 | 赵欣 | 男 | 会计05 | 1984-1-27 | 1350222×××× |
0531 | 张志国 | 男 | 生物05 | 1986-9-10 | 1331256×××× |
0538 | 于兰兰 | 女 | 生物05 | 1984-2-20 | 1331200×××× |
0591 | 王丽丽 | 女 | 电子05 | 1984-3-20 | 1332080×××× |
0592 | 王海强 | 男 | 电子05 | 1986-11-1 |
表3.7 课程表C
课程号 | 课程名 | 学分数 | 学时数 | 任课教师 |
K001 | 计算机图形学 | 2.5 | 40 | 胡晶晶 |
K002 | 计算机应用基础 | 3 | 48 | 任泉 |
K006 | 数据结构 | 4 | 64 | 马跃先 |
M001 | 政治经济学 | 4 | 64 | 孔繁新 |
S001 | 高等数学 | 3 | 48 | 赵晓尘 |
表3.8 学生作业表W
课程号 | 学号 | 作业1成绩 | 作业2成绩 | 作业3成绩 |
K001 | 0433 | 60 | 75 | 75 |
K001 | 0529 | 70 | 70 | 60 |
K001 | 0531 | 70 | 80 | 80 |
K001 | 0591 | 80 | 90 | 90 |
K002 | 0496 | 80 | 80 | 90 |
K002 | 0529 | 70 | 70 | 85 |
K002 | 0531 | 80 | 80 | 80 |
K002 | 0538 | 65 | 75 | 85 |
K002 | 0592 | 75 | 85 | 85 |
K006 | 0531 | 80 | 80 | 90 |
续表
课程号 | 学号 | 作业1成绩 | 作业2成绩 | 作业3成绩 |
K006 | 0591 | 80 | 80 | 80 |
M001 | 0496 | 70 | 70 | 80 |
M001 | 0591 | 65 | 75 | 75 |
S001 | 0531 | 80 | 80 | 80 |
S001 | 0538 | 60 | 80 |
1.在SQL Server中使用对象资源管理器和SQL命令创建学生作业管理数据库,数据库的名称自定。
(1)使用对象资源管理器创建数据库,请给出重要步骤的截图。
(2)删除第(1)步创建的数据库,再次使用SQL命令创建数据库,请给出SQL代码。
(3)创建数据库之后,如果有需要,可以修改数据库。
2.对表3.6,表3.7和表3.8,分别以下表的方式给出各字段的属性定义和说明。
字段名 | 数据类型 | 长度或者精度 | 默认值 | 完整性约束 |
…… | …… | …… | …… | |
…… | …… | …… | …… |
3.使用SQL命令在学生作业管理数据库中建立学生表、课程表和学生作业表,在实验报告中给出SQL代码。
4.在各个表中输入表3.6、表3.7和表3.8中的相应内容。
5. 进行以下的查询操作(每一个查询都要给出SQL语句,列出查询结果)。
(1)查询各位学生的学号、班级和姓名。
(2)查询课程的全部信息。
(3)查询数据库中有哪些专业班级。
(4)查询学时数大于60的课程信息。
(5)查询在1986年出生的学生的学号、姓名和出生日期。
(6)查询三次作业的成绩都在80分以上的学号、课程号。
(7)查询姓张的学生的学号、姓名和专业班级。
(8)查询05级的男生信息。
(9)查询没有作业成绩的学号和课程号。
(10)查询学号为0538的学生的作业1总分。
(11)查询选修了K001课程的学生人数。
(12)查询数据库中共有多少个班级。
(13)查询选修三门以上(含三门)课程的学生的学号和作业1平均分、作业2平均分和作业3平均分。
(14)查询于兰兰的选课信息,列出学号、姓名、课程名(使用两种连接查询的方式)。
运行结果:
1.在SQL Server中使用对象资源管理器和SQL命令创建学生作业管理数据库,数据库的名称自定。
(1)使用对象资源管理器创建数据库,请给出重要步骤的截图。
(2)删除第(1)步创建的数据库,再次使用SQL命令创建数据库,请给出SQL代码。
create database 学生作业管理数据库;
2.对表3.6,表3.7和表3.8,分别以下表的方式给出各字段的属性定义和说明。
表3.6
字段名 | 数据类型 | 长度或者精度 | 默认值 | 完整性约束 |
学号 | Char(9) | 9字节 | Primary key | |
姓名 | Char(20) | 20字节 | unique | |
性别 | Char(2) | 20字节 | ||
专业班级 | Char(20) | 20字节 | ||
出生日期 | date | |||
联系电话 | Char(11) | 11字节 |
表3.7
字段名 | 数据类型 | 长度或者精度 | 默认值 | 完整性约束 |
课程号 | Char(9) | 9字节 | Primary key | |
课程名 | Char(20) | 20字节 | unique | |
学分数 | Numeric(2.1) | 小数点一位 | ||
学时数 | smallint | 2字节 | ||
任课教师 | Char(20) | 20字节 |
表3.8
字段名 | 数据类型 | 长度或者精度 | 默认值 | 完整性约束 |
课程号 | Char(9) | 9字节 | Primary key,foreign key | |
学号 | Char(9) | 9字节 | Primary key,foreign key | |
作业1成绩 | Int | 4字节 | ||
作业2成绩 | Int | 4字节 | ||
作业3成绩 | Int | 4字节 |
3.使用SQL命令在学生作业管理数据库中建立学生表、课程表和学生作业表,在实验报告中给出SQL代码。
create table S
(Sno char(9) primary key,
Sname char(20) unique,
Ssex char(2),
Sclass char(20),
Sbirth date,
tell char(11)
);
create table C
(Cno char(9) primary key,
Cname char(20) unique,
Ccredit numeric(2,1),
Chour smallint,
Cteacher char(20)
);
create table W
(Cno char(9) ,
Sno char(9) ,
Wn1 int,
Wn2 int,
Wn3 int,
primary key(Cno,Sno),
foreign key(Sno) references S(Sno),
foreign key(Cno) references C(Cno)
);
4.在各个表中输入表3.6、表3.7和表3.8中的相应内容。
5. 进行以下的查询操作(每一个查询都要给出SQL语句,列出查询结果)。
(1)查询各位学生的学号、班级和姓名。
select Sno,Sclass,Sname
from S;
(2)查询课程的全部信息。
select *
from C;
(3)查询数据库中有哪些专业班级。
select distinct Sclass
from S;
(4)查询学时数大于60的课程信息。
select *
from C
where Chour>60;
(5)查询在1986年出生的学生的学号、姓名和出生日期。
select Sno,Sname,Sbirth
from S
where Sbirth>='1986-1-1'
and Sbirth<'1987-1-1';
或者
select Sno,Sname,Sbirth
from S
where Sbirth like '%1986%';
(6)查询三次作业的成绩都在80分以上的学号、课程号。
select W.Sno,W.Cno
from W
where Wn1>80
and Wn2>80
and Wn3>80;
(7)查询姓张的学生的学号、姓名和专业班级。
select Sno,Sname,Sclass
from S
where Sname like'张%';
(8)查询05级的男生信息。
select *
from S
where Sclass like'%05'
and Ssex='男';
(9)查询没有作业成绩的学号和课程号。
select Sno,Cno
from W
where Wn1 is NULL
or Wn2 is NULL
or Wn3 is NULL;
(10)查询学号为0538的学生的作业1总分。
select Sum(Wn1) as 总分数
from W
where Sno=0538;
(11)查询选修了K001课程的学生人数。
select count(Sno) as 选修K001课程的学生人数
from W
where Cno ='K001';
(12)查询数据库中共有多少个班级。
select count(distinct Sclass) as 班级数
from S;
(13)查询选修三门以上(含三门)课程的学生的学号和作业1平均分、作业2平均分和作业3平均分。
select Sno,AVG(Wn1)as Wn1平均分,AVG(Wn2)as Wn2平均分,AVG(Wn3)as Wn3平均分
FROM W
GROUP BY Sno/*按学生分组 */
Having COUNT(Cno)>=3
(14)查询于兰兰的选课信息,列出学号、姓名、课程名(使用两种连接查询的方式)。
select S.Sno,S.Sname,C.Cname
FROM W
inner join S
on S.Sno=W.Sno
inner join C
on C.Cno=W.Cno
where S.Sname='于兰兰';
select S.Sno,S.Sname,C.Cno
from W,S,C
where S.Sno=W.Sno
and W.Cno=C.Cno
and S.Sname='于兰兰';
五、实验体会
操作不够熟练,需要加强练习。