数据库第四次试验

实验四 SQL Serve的数据更新、视图操作

一、实验目的:

1. 掌握采用Transact-SQL实现数据更新。

2. 掌握采用Transact-SQL实现视图的定义、删除、查询与更新。

二、实验内容

按照学生课程数据库studb和SPJ数据库完成以下操作:

(一)数据更新 

1)  插入一个学生:张红,女,200215135,信息系,20岁;

2)  插入一个选课录:200215135,1,成绩未定;

3)  将计算机系所有学生的年龄加1岁;

4)  添加一条选课记录,信息为:张红选修了数据库课程,成绩89;

5)  删除所有200215130学生的选课记录;

6)  删除所有姓张的同学的信息;

7)  请自行设计案例对学生-课程数据库的数据更新,并观察是否有违反数据的完整性约束。

(二)视图

1)创建一个学生成绩统计视图,包括学号,姓名,选课门数,平均分,最高分,最低分;

2)利用上题所建视图实现:

①查询成绩高于自己平均成绩的选课记录;

②查询每个同学获得最高分的选课记录;

3)请为三建工程项目建立一个供应情况的视图,包括供应商(SNAME)、零件(PNAME)、供应数量(QTY)。针对该视图完成下列查询:

①找出三建工程项目使用的各种零件及其数量;

②找出供应商东方红的供应情况;

③将东方红供应的螺丝刀数量增加100。

三、实验要求

1.写出正确的Transact-SQL命令。

2.无须记录正确的查询结果。但要求记录实验过程中发生的有学习意义的错误及错误信息。

3.写好实验小结


create database Studata
ON(
	NAME=Studat,
	FILENAME='D:\project\Studat.mdf',
	SIZE=5mb,
	FILEGROWTH=2MB
),
(
	NAME='Stulog',
	FILENAME='D:\project\Stulog.ldf',
	SIZE=5MB,
	MAXSIZE=10MB,
	FILEGROWTH=10MB
)
GO

use Studata;

create table s(
	class char(5),
	Sno char(2),
	name char(10)unique,
	Sex char(2),
	Age INT,
	PRIMARY KEY(class,Sno),
)

insert into s(class,Sno,name,Sex,Age)
			values('95031','25','李明','男',21)

insert into s(class,Sno,name,Sex,Age)
			values('95101','10','王丽','女',20)

insert into s(class,Sno,name)
			values('95031','30','郑和')

alter table s
alter column Age SMALLINT;

alter table s
ADD comedate datetime ;

alter table s
Drop CONSTRAINT PK__s__7C8480AE;

create clustered INDEX inxage
ON s(age desc)

drop index s.inxage;

drop table s;



create table Student(
	Sno char(9)PRIMARY KEY,
	Sname char(20) unique,
	Ssex char(2),
	Sage SMALLINT,
	Sdept char(20)
);

create table Course(
	Cno char(4)PRIMARY KEY,
	Cname char(40) NOT NUll,
	Cpno char(4),
	Ccredit SMALLINT,
	FOREIGN KEY(Cpno) REFERENCES Course(Cno)
);

create table SC
(
	Sno char(9),
	Cno char(4),
	Grade SMALLINT,
	PRIMARY KEY(Sno,Cno),
	FOREIGN KEY (Sno) REFERENCES Student(Sno),
	FOREIGN KEY (Cno) REFERENCES Course(Cno),
);

/*Student表*/
insert into Student(Sno,Sname,Ssex,Sage,Sdept)
			Values('201215121','李勇','男',20,'CS')
			
insert into Student(Sno,Sname,Ssex,Sage,Sdept)
			Values('201215122','刘晨','女',19,'CS')

insert into Student(Sno,Sname,Ssex,Sage,Sdept)
			Values('201215123','王敏','女',18,'MA')

insert into Student(Sno,Sname,Ssex,Sage,Sdept)
			Values('201215125','张立','男',19,'IS')

/* Course表*/	
insert into Course(Cno,Cname,Ccredit)
			Values('6','数据处理',2)

insert into Course(Cno,Cname,Ccredit)
			Values('2','数学',2)

insert into Course(Cno,Cname,Cpno,Ccredit)
			Values('7','PASCAL语言','6',4)

insert into Course(Cno,Cname,Cpno,Ccredit)
			Values('5','数据结构','7',4)

insert into Course(Cno,Cname,Cpno,Ccredit)
			Values('4','操作系统','6',3)

insert into Course(Cno,Cname,Cpno,Ccredit)
			Values('1','数据库','5',4)

insert into Course(Cno,Cname,Cpno,Ccredit)
			Values('3','信息系统','1',4)	
			
/*SC表*/
insert into SC(Sno,Cno,Grade)
			Values('201215121','1',92)

insert into SC(Sno,Cno,Grade)
			Values('201215121','2',85)

insert into SC(Sno,Cno,Grade)
			Values('201215121','3',88)

insert into SC(Sno,Cno,Grade)
			Values('201215122','2',90)

insert into SC(Sno,Cno,Grade)
			Values('201215122','3',80)

select * from Student
select * from SC
select * from Course
/*(1)插入一个学生:张红,女,200215135,信息系,20岁;*/
insert into Student(Sno,Sname,Ssex,Sage,Sdept)Values('200215135','张红','女',20,'IS')
/*(2)插入一个选课录:200215135,1,成绩未定;*/
insert into SC(Sno,Cno,Grade)Values('200215135','1',null)
/*(3)将计算机系所有学生的年龄加1岁;*/
update student set Sage=Sage+1 where Sdept='CS'
/*(4)添加一条选课记录,信息为:张红选修了数据库课程,成绩89;*/
update sc set grade=89 where sno in (select sno from student where sname ='张红')
/*(5)删除所有200215130学生的选课记录;*/
delete from Sc where sno = '200215130'
/*(6)删除所有姓张的同学的信息;*/
delete from sc where sno in(select sno from student where sname like '张%')
delete from student where sname like '张%'
/*(7)请自行设计案例对学生-课程数据库的数据更新,并观察是否有违反数据的完整性约束。*/

/*创建一个学生成绩统计视图,包括学号,姓名,选课门数,平均分,最高分,最低分;*/
create view 学生成绩统计(学号,姓名,选课门数,平均分,最高分,最低分)
AS select sc.sno,sname,count(cno),avg(grade),max(grade),min(grade) from  student,sc
where student.sno = sc.sno group by sc.sno,student.sname

/*利用上题所建视图实现:*/
/*①查询成绩高于自己平均成绩的选课记录;*/
select Sc.Sno,Cno,Grade from Sc,学生成绩统计 where Sc.Sno = 学生成绩统计.学号 and Grade>平均分
/*②查询每个同学获得最高分的选课记录;*/
select Sc.Sno,Cno,Grade from Sc,学生成绩统计 where Sc.Sno = 学生成绩统计.学号 and Grade=最高分;


猜你喜欢

转载自blog.csdn.net/qq_37804064/article/details/79978058