数据库实验

实验一 数据定义
一、实验目的与要求
掌握使用查询分析器进行数据定义的方法
二、实验内容
(1)数据库的定义
(2)表和视图的定义
(3)索引的定义
创建和使用表、视图
1.创建数据库,命名为学号后三位
2.在个人学号数据库中创建如下的三张表,并输入记录内容:
教师表(JS)
列名 说明 数据类型
Tno 教师号 字符串,长度为7
0Tname 姓名 字符串,长度为10
Tsex 性别 字符串,长度为2
Birthday 出生日期 日期时间型
Dept 所在部门 字符串,长度为20
Sid 身份证号 字符串,长度为18
JS
Tno Tname Tsex Birthday Dept Sid
T001 刘薇 女 1971-3-20 电信 551021197103203121
T002 张骐劲 男 1963-7-13 数理 32010119630713318X
T003 李子文 女 1973-9-15 外语 461031197309153829
T004 江海防 女 1960-2-18 社科 560102196002185623
T005 李铁 男 1977-10-11 数理 230103197710118632
T006 吴天一 男 1962-4-23 电信 320104196204237516
T007 赵志华 男 1968-8-27 社科 321102196808277214
T008 钱进 男 1980-7-10 电信 570102198007103452
T009 孙星南 女 1981-3-2 外语 110102198103024125
课程表(Course)
列名 说明 数据类型
Cno 课程号 字符串,长度为10
Cname 课程名 字符串,长度为20
Credit 学分 短整型
property 课程性质 字符串,长度为10
Hours 授课时数 整数
Course
Cno Cname Credit property
01010101 大学英语1 4 考试
01010102 普通物理1 4 考试
01010103 高等数学1 6 考试
01010104 形势政策 2 考查
01010105 计算机基础 4 考查
授课表(SK)
列名 说明 数据类型
Tno 教师号 字符串,长度为7
Cno 课程号 字符串,长度为10
Hours 授课时数 整数
SK
Tno Cno Hours
T001 01010105 64
T002 01010102 64
T009 01010101 64
T004 01010104 32
T005 01010103 96
T006 01010105 64
T003 01010101 64

3.修改表结构
1)在授课表中添加一个授课类别,列名为Type,类型为char(4)
2) 将授课表中的Hours的类型改为Smallint
3)删除课程表的Hours列

4.完成以下功能:
1)定义表students,其中字段有:SNO CHAR(10) 、 SNAME CHAR(8) 、 AGE NUMERIC(3,0)、 SEX CHAR(2)、 BPLACE CHAR(20)、Polity CHAR(20)。要求SNO和SNAME不为空,SNO为主键。
2)在教师表JS中增加住址列,字段名为ADDR,类型为 CHAR,长度50。
3)根据students表,建立一个只包含学号、姓名、年龄的女学生表,表名为GRIL。
4)建立一成绩表,表名为score,其中字段有:SNO CHAR(10),CNO CHAR(10),scoreNUMERIC(6,0),并输入部分记录,内容自定

5.定义索引
1)在数据库中的新建一个数据表,名为js1,结构与js表相同。为js1表创建一个唯一聚集索引,索引字段为Sid,索引名为I_js_sid。
2)为数据库中的course数据表,创建一个复合索引,索引名为I_cource_xf,使用Cno和Credit字段
三、实验步骤
1.步骤
(1)创建和使用数据库
(2)创建和使用表、视图
(3)索引

2.主要代码

CREATE TABLE Course
 (Cno CHAR(10) PRIMARY key,
  Cname CHAR(20) not null,
	Credit SMALLINT CONSTRAINT C1 check(Credit>0),
	property char(10) DEFAULT'必修',
	Hours INT
	);
CREATE TABLE Course
 (Cno CHAR(10) PRIMARY key,
  Cname CHAR(20) not null,
	Credit SMALLINT CONSTRAINT C1 check(Credit>0),
	property char(10) DEFAULT'必修',
	Hours INT
	);
	
	CREATE TABLE SK
	(Tno char(7),
	 Cno char(10),
	 Hours INT CONSTRAINT C2 check(Hours>0),,
	 primary key(Tno,Cno)
	 foreign key(Tno) REFERENCES js(Tno),
	 foreign key(Cno) REFERENCES js(Tno)
	 );
	 
	 create table JS(
    Tno varchar(7) PRIMARY key,
    Tname varchar(10) not null,
    Tsex varchar(2) check(Tsex in('男','女')),
    Birthday datatime,
    Dept varchar(20),
    Sid varchar(18) union
);


insert into JS values('T001','刘薇','女',19720320,'电信',551021197103203121,'');
insert into JS values('T002','张骐劲','男',19630713,'数理',320101196307133180,'');
insert into JS values('T003','李子文','女',19730915,'外语',461031197309153829,'');
insert into JS values('T004','江海防','女',19600218,'社科',560102196002185623,'');
insert into JS values('T005','李铁','男',19771011,'数理',230103197710118632,'');
insert into JS values('T006','吴天一','男',19620423,'电信',320104196204237516,'');
insert into JS values('T007','赵志华','男',19680827,'社科',321102196808277214,'');
insert into JS values('T008','钱进','男',19800710,'电信',570102198007103452,'');
insert into JS values('T009','孙星海','女',19810302,'外语',110102198103024125,'');

INSERT into course values('01010101','大学英语1',4,'考试',64);
INSERT into course values('01010102','普通物理1',4,'考试',64);
INSERT into course values('01010103','高等数学1',6,'考试',96);
INSERT into course values('01010104','形势政策',2,'考查',32);
INSERT into course values('01010105','计算机基础',4,'考查',64);

INSERT INTO SK VALUES('T001','01010105',64);
INSERT INTO SK VALUES('T002','01010102',64);
INSERT INTO SK VALUES('T009','01010101',64);
INSERT INTO SK VALUES('T004','01010104',32);
INSERT INTO SK VALUES('T005','01010103',96);
INSERT INTO SK VALUES('T006','01010105',64);
INSERT INTO SK VALUES('T003','01010101',64);


alter table sk
add column Type char(4);

alter table sk modify column Hours smallint;

alter table course 
drop column Hours;

create table students(
    SNO char(10) PRIMARY KEY NOT NULL,
		SNAME char(8) NOT NULL,
		AGE NUMERIC(3,0),
		SEX CHAR(2),
		BPLACE CHAR(20),
		Polity CHAR(20)
		);
	
alter TABLE JS 
add column TDDR char(50);

create table GRIL(
   SNO char(10) PRIMARY KEY NOT NULL,
	 SNAME CHAR(8) NOT NULL,
	 AGE NUMERIC(3,0)
	 );
	 
CREATE TABLE score(
   SNO char(10),
	 CNO char(10),
	 score numeric(6,0)
	 );
	 
insert into score values('101','01010101','98');
insert into score values('102','01010101','99');
insert into score values('103','01010101','100');
	 

create table JS1(
  Tno varchar(7),
	Tname varchar(10),
	Tsex varchar(2),
	Birthday datetime,
	Dept varchar(20),
	Sid varchar(18)
	);
	
create  INDEX I_js_sid 
on JS1(sid);


create  INDEX  I_cource_xf
on course(Cno,Credit);
	

四、实验小结
本次实验是数据定义,主要是进行数据库定义,运用SQL语言进行表格的建立及运用,修改某些表的结构,学会运用SQL语言建立索引和视图。总的还说,这个实验还是比较简单的,掌握好SQL的一些建表,建立索引和视图的语言就可以将这个实验完成。实验过程中要注意一些细节。

实验二 数据操纵

  1. 实验目的与要求
    掌握使用查询分析器对数据库中数据操作
  2. 实验内容
    (1)数据查询
    (2)数据更新

实验内容:

  1. 在查询分析器中,对“教师授课管理数据库”表中数据进行下列查询操作
    (1)查询所有男学生的姓名、出生日期。
    (2)查询男女教师的人数。
    (3)找出年龄在20~23岁之间的学生的学号、姓名和年龄,并按年龄升序排序。
    (4)找出年龄超过平均年龄的学生姓名。
    (5)查询成绩不及格的学生信息,包括姓名、学号、课程名和成绩。
    (6)查询所有讲授“01010105”课程的教师信息。
    (7)查询1971年以前(含1971年)出生的所有教师的任课信息,包括教师姓名、出生日期、所授课程名、学时数。
    (8)查询所有未授课的教师信息。
    2.在查询分析器中,对表中数据进行插入操作
    (1)向students表中插入几条记录,内容自定。
    (2)把教师李映雪(教师号为1476,其他内容自定)的记录加入到教师表JS中。
    (3)根据students表,建立一个只包含学号、姓名、年龄的女学生表,表名为GRIL。
    3.在查询分析器中,对表中数据进行修改操作
    (1)把所有学生的年龄增加一岁。7
    (2)将所有选修某一指定课程的学生成绩增加5分。
    (3)将某个学生的所有成绩置0。
    4.在查询分析器中,对表中数据进行删除操作
    (1)从教师表JS中删除年龄已到60岁的退休教师的数据。
    (2)将学生表student中的某个学生删除,并删除其他表中与该学生相关的信息。

  2. 实验步骤
    1、步骤
    (1)在查询分析器中,对表中数据进行查询操作
    (2)在查询分析器中,对表中数据进行插入、修改和删除操作
    2、主要代码

 select SNAME,BPLACE
from students
where sex='男';

select Tsex,count(Tno)
from JS group by Tsex;

select sno, sname,age
from students 
where AGE>=20 and AGE<=23;

select sname
from students
where AGE>(
  select avg(age)
	from students);
	
select SNAME,Students.SNO,Course.Cname,score.score
from students,Course,score
where score.score<60 and students.SNO=score.sno and score.Cno=Course.Cno;


select*
from JS,SK
where Cno=01010105 and SK.Tno=JS.Tno;

select Tname,Birthday,Cno,Hours
from JS,SK
where birthday<=19710101 and JS.Tno=SK.Tno;

select*
from js
where js.Tno not in (
select tno
 from sk
 );



insert into students 
values('001','小名','1','男','20100101','团员');
insert into students 
values('002','小红','1','女','20100102','团员');

insert into js
values('1476','李映雪','女','19741112','电信','','');


update students
set age=age+1;
update score
set score=score+5
where cno='01010101';
update score
set score=0
where sno=101;


delete
from js
where 20210101-birthday>600000;
delete
from students
where sno=001;

delete
from score
where sno=001;

delete
from gril
where sno=001;

四、实验小结
本次实验是数据操作,主要是在表格的数据的基础上进行一些查找操作,对表格中的数据进行插入,修改,删除等操作。每种操作也都要运用到相关的一些SQL语句。总的来说,这个实验也是较为简单的,这次实验让我对SQL语言更加熟悉了,并且能够运用到实验中去。体会还是蛮深刻的。

实验三、完整性约束
1、实验目的与要求
掌握使用企业管理器和查询分析器对数据库进行完整性约束设置
2、实验内容
用企业管理器和查询分析器对数据库进行完整性约束设置
在查询分析器中设置完整性约束

对教师表JS、课程表course和授课表SK进行完整性约束设置,要求如下:
教师表(JS)
列名 说明 约束
Tno 教师号 主键
Tname 姓名 非空
Tsex 性别 取值为“男”、“女”
Birthday 出生日期 允许空
Dept 所在部门 允许空
Sid 身份证号 不重
课程表(course)
列名 说明 约束
Cno 课程号 主键
Cname 课程名 非空
Credit 学分 大于0
property 课程性质 默认值为“必修”
授课表(SK)
列名 说明 约束
Tno 教师号 主键,引用教师表JS的外码
Cno 课程号 主键,引用课程表course的外码
Hours 授课时数 大于0

3、实验步骤
1、步骤
数据库的完整性约束设置
2、主要代码

 CREATE TABLE Course
    (Cno CHAR(10) PRIMARY key,
    Cname CHAR(20) not null,
	Credit SMALLINT CONSTRAINT C1 check(Credit>0),
	property char(10) DEFAULT'必修',
	Hours INT
	);
	
	CREATE TABLE SK
	(Tno char(7),
	 Cno char(10),
	 Hours INT CONSTRAINT C2 check(Hours>0),,
	 primary key(Tno,Cno)
	 foreign key(Tno) REFERENCES js(Tno),
	 foreign key(Cno) REFERENCES js(Tno)
	 );
	 
	 create table JS(
    Tno varchar(7) PRIMARY key,
    Tname varchar(10) not null,
    Tsex varchar(2) check(Tsex in('男','女')),
    Birthday datatime,
    Dept varchar(20),
    Sid varchar(18) union
);

四、实验小结
此次实验是完整性约束。这个知识点还是很重要的,因为我们在定义一个实体的时候,我们就很有可能对它们进行一些约束以满足我们的要求。完整性约束的相关语句可以在定义一个实体的时候,直接进行约束。这一节的知识点在书上也是很重要的。在做实验的过程中,我通过查阅书籍再次温故了这节的知识。

实验四 数据库编程
1、实验目的与要求
(1)熟悉T-SQL的流程控制语句、游标的使用
(2)学会编制自定义函数
(3)掌握创建、执行、修改及删除存储过程的方法
2、实验内容
(1)使用T-SQL的流程控制语句、游标,完成对数据的处理
(2)使用自定义函数,完成对数据的处理
(3)使用存储过程,完成对数据的处理
3、实验步骤
1、步骤
(1)使用T-SQL的流程控制语句、游标,进行程序设计
(2)自定义函数并进行调用,完成对数据的处理
(3)使用存储过程,完成对数据的处理
2、主要代码

select students.sno,students.sname,course.cname,score
from score,course,students
where score.cno=course.cno and students.sno=score.sno and (score =(
    select min(score)
from score
) or
score =(
    select max(score)
from score
)) ;

create table banji(
bno char(4),
bname char(10)
);
		 
create table banji_students (
     bno char(4),
sno char(10) );
		 
insert into students values('011','张',3,'男','2021-01-02','团员');
insert into students values('012','王',4,'男','2021-02-03','党员');
insert into banji values('100','一班');
insert into banji_students values('100','011');
insert into banji_students values('100','012');

select banji.bname,students.sno,students.sname,students.sex,students.BPLACE,students.Polity
from students,banji,banji_students
where banji.bno=100 and banji_students.sno=students.sno



drop table students;
create table students(
    SNO CHAR(10) PRIMARY KEY NOT NULL,
    SNAME CHAR(8) NOT NULL,
    AGE NUMERIC(3,0),
    SEX CHAR(2),
    BPLACE CHAR(20),
    Polity CHAR(20) DEFAULT '群众'
);
insert into students values('013','一',10,'男','20210207','团员');
insert into students values('014','二',11,'女','20210304','党员');
insert into students values('015','三',12,'女','20210203','');
select * 
  from students;
insert into students(SNO,SNAME,AGE,SEX,BPLACE) values('016','四',11,'男','20210103');




SELECT avg(score),Course.Cname,banji.Bname
FROM score,students,Course,banji,banji_students
where Course.Cno=score.CNO and banji.Bno=banji_students.Bno and banji.bno=100
      and banji_students.Sno = students.SNO and banji_students.Sno=score.SNO
group by Course.Cname,banji.bname;

SELECT score,(case score.CNO when 1 then Course.Cname ELSE Course.Cname END),banji.Bname
FROM score,students,Course,banji,banji_students
where Course.Cno=score.CNO and banji.Bno=banji_students.Bno 
and banji.Bno=100 and banji_students.Sno = students.SNO and banji_students.Sno=score.SNO;



SELECT students.SNAME,(case when score >=90 then 'A' 
                            when score>=80 and score<90 then 'B'
when score>=70 and score<80 then 'C'
when score>=60 and score<70 then 'D'
else '不及格' end),Course.Cname,banji.Bname
FROM score,students,Course,banji,banji_students
where Course.Cno=score.CNO and banji.Bno=banji_students.Bno 
and banji.Bno=100 and banji_students.Sno = students.SNO and banji_students.Sno=score.SNO;

四、实验小结
数据库编程,这个实验主要是对流程控制语句的使用,还有就是存储过程的创建与使用,函数的创建与使用。对我来说,这个实验是有难度的。特别是在存储过程的创建与使用,函数的创建于使用这两块实验中,总是无法很好的完成。还是需要多查看一些资料,多多提高自己。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值