实验五 视图的定义、使用实验

-- 1.  定义“IS”系学生基本情况视图V_IS 并查询结果;
create view V_IS as
select * from student
where sdept='IS'
with check option ;
/*
drop view v_IS;
create view V_IS as
select * from student
where sdept='IS';
*/
-- select *from v_IS;
-- 2.  将S,C,SC表中学生的学号,姓名,课程号,课程名,成绩定义为视图V_S_C_G并查询结果;
-- drop view V_S_C_G;
create view V_S_C_G as
select sno,sname,cno,cname,grade
from sc join student using(sno)
join course using(cno);
SELECT *from v_s_c_g;
-- 3.  将各系学生人数,平均年龄定义为视图V_NUM_AVG并查询结果;
create VIEW V_NUM_AVG as
select Sdept,count(sno) from student
group by sdept;
SELECT * from v_num_avg;
-- 4.  定义一个反映学生出生年份的视图V_YEAR并查询结果;
create view V_YEAR as
select sno,year(now())-sage as Birthyear 
from student;
select *from v_year;
-- 5.  将各位学生选修课程的门数及平均成绩定义为视图V_AVG_S_G并查询结果;
-- drop view V_AVG_S_G;
create view V_AVG_S_G as
select sno,count(cno),avg(grade) as avg_grade 
from sc join student using(sno)
group by sno;
SELECT * from v_avg_S_G;
-- 6.  将各门课程的选修人数及平均成绩定义为视图V_AVG_C_G并查询结果;
create view V_AVG_C_G as
select cno,count(*) as cnum,avg(grade) avg_grade
from sc group by cno;
select *from V_AVG_C_G;
-- 7.  查询平均成绩为90分以上的学生学号、姓名和成绩;
SELECT sno,sname,avg_grade from v_avg_S_G
join student using(sno)
where avg_grade>=90 ;
-- 8.  查询各课成绩均大于平均成绩的学生学号、姓名、课程和成绩;
SELECT sno,sname,cno,grade from sc a
join student using(sno)
where not exists (
	select * from sc b join v_avg_c_g using(cno)
	where a.Grade< v_avg_c_g.avg_grade and a.Cno=b.Cno
);
-- 9.  按系统计各系平均成绩在80分以上的人数,结果按降序排列;
select sdept,count(*) num 
from  student join v_avg_s_g using(sno)
where avg_grade > 80 
group by sdept
order by num desc;
-- 10.通过视图V_IS,分别将学号为“200215121”和“200215124”的学生姓名更改为“S1_MMM”,”S4_MMM” 并查询结果;
update V_IS set sno='S1_MMM' where sno='200215121'; -- 由于该同学为CS系,因此更新失败
update V_IS set sno='S4_MMM' where sno='200215124';
select *from v_is;
select *from student;
select *from sc;
select *from v_s_c_g;
-- 11.通过视图V_IS,新增加一个学生记录 ('S12','YAN XI',19,'IS'),并查询结果;
insert into V_IS(sno,sname,sage,sdept) values('S12','YAN XI',19,'IS');
-- 12.通过视图V_IS,新增加一个学生记录 ('S13','YAN XI',19,'MA'),并查询结果;
-- 注意由于该学生是MA系的,当有check约束时将会产生更新错误.
insert into v_is(sno,sname,sage,sdept) values('S13','YAN XI',19,'MA');
-- 13.通过视图V_IS,删除学号为“S12”和“S13”的学生信息,并查询结果;
-- 由于s13不是is系,因此不能删除
delete from v_is where sno='S12' or sno='S13' ;
-- 14.要通过视图V_S_C_G,将学号为“200215124”的姓名改为“200215124_MMM”,是否可以实现?
update v_s_c_g set sname='200215124_MMM' where sno='200215124';
-- 15.要通过视图V_AVG_S_G,将学号为“S1”的平均成绩改为90分,是否可以实现?
-- 不能实现,因为视图是不真正存在的,对视图的修改是对基本表的修改,
-- 而平均分在基本表中不存在,涉及多个成绩,不能修改


一、实验目的 1.掌握SQL Server 2005的安装。 2.掌握SQL Server Management Studio的启动和使用。 3.掌握SQL Server 2005服务器的配置和注册。 4.掌握SQL Server 2005查询的基本使用。 5.掌握应用SQL Server Management Studio创建数据库的方法。 6.掌握应用SQL Server Management Studio修改和查看数据库的方法。 7.掌握应用SQL Server Management Studio删除数据库的方法。 8.掌握应用Transact-SQL语句创建数据库的方法。 9.掌握应用Transact-SQL修改和查看数据库的方法。 10.掌握通过Transact-SQL删除数据库的方法。 11.掌握SQL Server 2005数据库和操作系统物理文件的关系。 12.掌握数据库的分离和附加方法。 二、实验内容 1.完成SQL Server 2005开发版的安装。 提示:若计算机系统中已经安装有SQL Server 2005系统,则在安装时需要选择安装命名实例。安装过程中身份验证模式选择“混合模式”并设置sa账户的密码。 2.利用SQL Server配置管理器启动、停止SQL Server服务(包括默认实例和命名实例),配置SQL Server服务为自动启动。 3.利用SQL Server配置管理器配置进行SQL Server 2005网络配置,启用默认实例和命名实例的TCP/IP协议。 4.利用SQL Server外围配置器配置数据库引擎的服务及远程连接,设置为“本地连接和远程连接”,选择“同时使用TCP/IP和named pipes”。 5.利用SQL Server Management Studio注册安装的命名实例。 6.利用SQL Server Management Studio注册远程服务器。 提示:注册远程服务器时需要使用混合验证模式,利用sa账户和密码登录远程服务器。 7.启动SQL Server Management Studio,连接到服务器。新建一个查询,在其中输入如下代码: DECLARE @position int, @string char(5) SET @position = 1 SET @string = 'China' WHILE @position <= DATALENGTH(@string) BEGIN SELECT SUBSTRING(@string, @position, 1) 字符, ASCII(SUBSTRING(@string, @position, 1)) ASCII码 SET @position = @position + 1 END
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值