SQL之视图

/*视图*/
  
  /*虚拟表,不保存视图,只保存一个简单的查询语句*/
  /*视图中的数据来源于基表,可以通过视图对基表的数据进行增,删,改查,(在满足一定条件下)*/
  
  /*表变量*/
  declare @tab table
  (
  tid int primary key,
  price money check(price>3000),
  sid int default
  )
  --允许加约束
  --表变量之间不可以有相互引用的关系
  
  /*临时表*/
  --1.局部临时表:
  --只对当前连接有效,当连接断开的时候临时表消失
  --局部临时表名称前加#
  create table #emp
  (
  eid int primary key,
  ename varchar(10),
  esal money check(esal>300)
  )
  insert into #emp select 1001,'accp',5678
  --临时表不可能创建外键,但可以有其他约束
  
  --全局临时表
  --对所有连接有效,创建表的连接断开临时表消失
  --全局临时表前加两个##
  、
  /*首选表变量其次临时表,最后关系表*/
  
  --全局临时表不可创建外键,但可以有其他类型的约束
  
  /*视图*/
  create table dept
  (
  did int primary key,
  dname varchar(10)
  )
  create table emp
  (
  eid int primary key,
  ename varchar(10),
  did int references dept(did)
  )
  
  insert into dept select 1001,'财务部'
  union select 1002,'人事部'
  union select 1003,'行政部'
  union select 1004,'技术部'
  
  insert into emp select 2001,'rose',1001
  union select 2002,'jack',1003
  union select 2003,'will',1002
  union select 2004,'gigi',1004
  --drop table dept
  
  /*创建视图*/
  create view v as select * from emp
  --v为视图名,as为必须
  
  /*查询视图*/
  select * from v
  
  /*通过视图V向基表emp录入数据*/
  insert into v values(2005,'mikel',1003)
  
  /*通过视图向基表更新数据*/
  update v set ename='helen' where eid=2005
  
  /*通过视图删除基表的数据*/
  delete from v where eid=2005
  
  --drop view v
  
  /*视图不包含主键列*/
  create view v as select ename,did from emp
  
  select * from v
  --可以查询,可以删除,可以更新,不可以插入
  
  /*当所创建的视图不包含基表所有非空列的时候,不能通过该视图进行数据录入*/
  
  
  /*多表视图*/
  
  /*重定义视图*/
  alter view v
  as select did from emp
  
  create view v as select eid,ename,emp.did as edid,dept.did as did,dname
  from emp,dept where emp.did=dept.did
  --创建多表连接的时候,视图中的列名必须唯一
  --如果没有where子句,则结果为两表的笛卡儿积
  
  /*视图包含所有的列*/
  delete from v
  --不可删除数据,因为修改会影响多个基表
  
  insert into v values(11,'aa',1001,1008)
  --不能录入数据,因为修改会影响到多个基表
  
  update v set ename='ee',dname='cc'
  --更新,影响到一个基表时可以,多个基表则不允许
  
  /*视图不包含基表的所有非空列*/
  --可以查询,不可删除,插入,
  --更新同上
  
  /*where条件*/
  alter view v as select * from dept where did>1003
  --定义视图时指定的where条件对查询起作用
  
  delete from v where did=1001
  --对删除起作用
  
  update v set dname='aa' where did=1001
  --对更新起作用
  
  insert into v values(1001,'dd')
  --对插入不起作用,但是查询不到
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值