SQL server中使用视图,索引,游标

一.视图(view)

视图其实就是一个虚表,是从一个或多个表中使用select语句导出的虚表,用来导出的表称为基本表;对视图的操作会影响到基本表

为什么要使用视图?

  1. 为用户集中数据,简化用户的数据查询和处理
  2. 保证数据的逻辑独立性
  3. 重新定制数据,使数据便于分享
  4. 数据保密,增加了安全性

注意:

  • 不是所有视图都可以更新(因其包含派生域或常量域);
  • 定义视图的查询不可以包含order by,compute,compute by子句或into关键字
  • with check option:强制视图上执行的所有数据修改语句都必须符合由select_statement设置的准

示例:

create view view_Student
as select *
     from Student
     where Sdept='cs'
    with check option;

二.索引(index)

理解预读,逻辑读,物理读:

--(1):查询Student表,预读40次
select * from Student

--(2):j接着再次查询Student表,预读0次
select * from Student

--(3):清空缓存后,查询Student表,预读40次
dbcc dropCleanBuffers
select * from Student

索引就相当于我们平常要看书,或者图书馆要搜索某本书的一个目录

1.聚集索引:对表和视图进行物理排序,只能有一个

--创建表Student ,主键Sno为聚簇索引,表中的记录按Sno升序存放
create table Student
(
Sno char(5) primary key clustered,
Sname varchar(6),
Sage int
)

--插入测试数据

insert into Student values('a0003', 'a03', 20)
insert into Student values("a0006', 'a06', 20)
insert into Student values('a0002', 'a02', 20)
insert into Student values("a0005', 'a05', 20)
insert into Student values("a0001', 'a01', 20)
--查看表中记录
select * from Student
--再插入测试数据
insert into Student values("a0004', 'a04', 20)
--再查看表中的记录,记录按Sno升序存放
select * from Student

2.非聚集索引:最多250个

一创建表, Sno为非聚族索引,表中的记录按数据录入的先后顺序存放。
create table Student
(
Sno char(5) primary key nonclustered,
Sname varchar(6),
Sage int 
)

--插入测试数据

insert into Student values('a0003', 'a03', 20)
insert into Student values('a0006', 'a06', 20)
insert into Student values("a0002', 'a02', 20)
insert into Student values('a0005', 'a05', 20)
insert into Student values('a0001', 'a01', 20)
--查看表中记录

 select * from Student
--再插入测试数据

 insert into Student values('a0004', 'a04' 20)

--查看表中的记录,记录按数据录入的先后顺序存放。
select * from Student

3.示例

例 :按Course表的Cname列(降序)创建一个名为index_ Cname的非聚集索引。
create index index_ Course on Course(Cname desc)

例:在学生表上按姓名建立聚集索引

create unique clustered index index_ Sname on Student Sname)

例:查看学生表上的索引
EXEC sp_ helpindex Student

例I :删除学生表中的"index_ Sname索引
drop index Student index_ Sname

三.游标

什么是游标?——总是与一条select语句相关联,游标由与之相关联的select语句得到的结果集和指向结果集中记录位置的指针构成。

为什么要使用游标?——可逐行读取游标中的数据

如何使用游标?

--声明declare 游标名 cursor for select 语句

--打开open 游标名

--读取fetch first|last|absolute n|relative n|prior|next from 游标名into #变量1..

--关闭close 游标名

--释放deallocate 游标名

代码示例:

declare cur_Stu cursor for select Sno,Sname,Sage from Student
open cur_Stu
declare @Sno char(9),@Sname varchar(20),@Sage int
fetch next from cur_Stu into  @Sno,@Sname,@Sage
while @@fetch_status=0
begin
	print '学号:'+@Sno+'  姓名:'+@Sname+'   年龄:'+cast(@Sage as char(2))
	fetch next from cur_Stu into  @Sno,@Sname,@Sage
end
close cur_Stu

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值