【Sql Server】实验报告四:索引与视图的使用

一、实验目的

1.掌握索引建立、修改与删除。

2.掌握建立视图、修改视图、删除视图。

3.掌握使用视图查询、更新数据、

二、实验内容

操作系统:Windows 10

数据库管理系统:SQL Server 2017

参考的是教材P84页的“实验3-3 索引与视图”的内容

  • 实验过程

在数据库supermarket上完成下列操作

use SuperMarket

1.为表Supplier的字段SupplierName创建一个非聚集、唯一的索引

create unique nonclustered 

index index_supplier

on Supplier(SupplierName)

2.使用系统存储过程Sp_helpindex查看表Supplier的索引情况,如果已有主码,能否为其再建立一个聚集索引?为什么?

Sp_helpindex Supplier

不能,聚集索引是通过设置主码来完成的,每个表的主码都是聚集索引,一个表只能有一个聚集索引, 非聚集索引可以有多个。因此无法重复创建聚焦索引

3.删除第1题中所创建的索引

drop index index_supplier on Supplier

--或者

drop index Supplier.index_supplier

4.写出创建满足下述要求的视图的SQL语句

(1)统计每个学生的消费金额

create view student_sale as

(select S.SNO,SName,SUM(SalePrice * SA.Number) 消费额

from Student S join SaleBill SA

on S.SNO = SA.SNO

join Goods G on SA.GoodsNO = G.GoodsNO

group by S.SNO,SName);

go

select * from student_sale

--删除视图 :drop view student_sale

(2)统计每个供货商提供的商品种类(一个商品编号代表一种)

create view supplier_kinds as

(select S.SupplierNO,SupplierName,count(S.SupplierNO) 商品种类数量

from Supplier S

join Goods G on S.SupplierNO = G.SupplierNO

group by S.SupplierNO,SupplierName)

go

select * from supplier_kinds

(3)统计各商品种类的销售数量及平均售价

create view googs_sum_avg as

(select g.CategoryNO,sum(s.Number) 销售数量,avg(SalePrice)  平均售价

from Goods g

join SaleBill s on g.GoodsNO=s.GoodsNO

join Category c on g.CategoryNO=c.CategoryNO

group by g.CategoryNO)

go 

select * from googs_sum_avg

(4)建立Sup001供货商的商品信息视图,并要求通过视图完成修改与插入操作时视图仍只有Sup001供货商的商品

create view Sup001_goods as

select * from Goods where SupplierNO='Sup001'

with check option

go

select* from Sup001_goods

5.利用上述视图,完成如下任务

(1)统计每个MIS专业学生的消费金额

select ssa.SNO,ssa.SName,Major,消费额 from student_sale ssa

join Student s on ssa.SNO=s.SNO

where Major='MIS'

(2)查询售价低于该商品总类售价平均价的商品名和售价

select GoodsName,SalePrice from Goods g

join googs_sum_avg gsa on g.CategoryNO=gsa.CategoryNO

where SalePrice<平均售价

(3)利用第4题(4)中的视图插入供货商Sup002的商品信息,结果如何?为什么?

insert into Sup001_goods (GoodsNO,SupplierNO, CategoryNO,GoodsName)

values('GN00011','Sup002','CN001','雀巢咖啡')

插入失败,原因是因为前面创建视图的时候规定了该视图在修改与插入的操作时, 视图仍只有Sup001供货商的商品

21edc769a48a477bb4bdea7b41dd36d2.png

(4)利用第4题(4)中的视图删除GN004的商品信息,结果如何?为什么?

delete from Sup001_goods  where GoodsNO='GN0004'

删除成功,因为前面创建视图的时候规定了该视图在修改与插入的操作时,视图仍只有Sup001供货商的商品, 但是对删除的权限没有规定,而且视图内有GN0004的商品信息

(5)查询供货种类大于等于2的供货商的名称及数量

select SupplierName,商品种类数量 from supplier_kinds  

where 商品种类数量>=2

四、实验结果

4.(1):758c1dc1d39c4654a45a276b3e26d699.png

4.(2):a91eb4512b664197926127214afd05e8.png

4.(3):40a4f72131bd49a981dd3d4d5f040c01.png

4.(4):a36fbcfca6064238bde282bb28c37aac.png

5.(1):174e66cb91634b0f9302f6ce86c6d7ec.png

5.(2):0de41be3563e47d6baea14ce55abaee1.png

5.(4):6093b26dd7ed469cb3dac07c61d2799e.png

5.(5):b5e5cd9a58cf4db1af96524f3f0c6c42.png

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
实验目的: 1. 了解视图索引的概念和作用; 2. 学会创建和使用视图索引实验环境: 操作系统:Windows 10 数据库管理系统:MySQL 8.0 实验内容: 1. 视图的创建和使用 1.1 视图的概念 视图是一种虚拟的表,是基于 SQL 语句的结果集的可视化表示。视图不存储具体的数据,而是引用基础表的数据。可以将视图看作是一个过滤器,可以对原始数据进行过滤、分组、排序等操作,从而满足不同用户的需求。 1.2 视图的创建 在 MySQL 中,可以使用 CREATE VIEW 语句来创建视图。下面是一个创建视图的示例: ``` CREATE VIEW myview AS SELECT column1, column2, ... FROM table_name WHERE condition; ``` 其中,myview 是视图的名称,column1、column2 等是需要显示的列,table_name 是基础表的名称,condition 是筛选条件。 1.3 视图使用 创建完视图后,就可以像使用普通表一样使用视图。例如,可以使用 SELECT 语句查询视图的内容: ``` SELECT * FROM myview; ``` 如果需要更新视图的内容,只需要使用 UPDATE、DELETE 或 INSERT 语句即可。这些操作会自动更新基础表的数据。 2. 索引的创建和使用 2.1 索引的概念 索引是一种数据结构,用于快速查找数据库中的数据。在 MySQL 中,可以为表中的列创建索引,从而加快查询速度。 2.2 索引的创建 在 MySQL 中,可以使用 CREATE INDEX 语句来创建索引。下面是一个创建索引的示例: ``` CREATE INDEX index_name ON table_name (column_name); ``` 其中,index_name 是索引的名称,table_name 是表的名称,column_name 是需要创建索引的列的名称。 2.3 索引使用 创建索引后,MySQL 会自动选择使用索引来加快查询速度。例如,可以使用 SELECT 语句查询带有索引的表的内容: ``` SELECT * FROM table_name WHERE column_name = 'value'; ``` 如果需要强制使用索引,可以使用 USE INDEX 语句: ``` SELECT * FROM table_name USE INDEX (index_name) WHERE column_name = 'value'; ``` 如果需要取消索引使用,可以使用 IGNORE INDEX 语句: ``` SELECT * FROM table_name IGNORE INDEX (index_name) WHERE column_name = 'value'; ``` 实验结论: 通过本次实验,我们了解了视图索引的概念和作用,并学会了创建和使用视图索引视图可以对基础表的数据进行过滤、分组、排序等操作,从而满足不同用户的需求;索引可以加快查询速度,提高数据库的性能。在实际应用中,应根据具体情况选择是否使用视图索引,以达到最佳的性能和效果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱因斯坦乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值