第一层:
这是最简单的理解,学过视图的人都知道的:视图是一张虚拟的表,但可以通过视图去修改原表的数据
例如:有一张UserInfo的表
uname upwd usex
张三 zhangsan 1
可以创建视图view_user
create view view_user as select * from UserInfo
如果执行update view_user set uname=‘aaa’ 你会发现UserInfo表里的所有uname都变成了aaa
第二层:
进一步深层的理解视图:不是所有的视图都能修改的,有些视图是只读的。
例如:又有一张表:Sex
sexid sexname
1 男
2 女
如果单纯查看UserInfo表,那显示张三的性别为1,所以要与Sex表关联一起查看,因此建立视图
create view view_user as select u.uname,u.upwd,s.sexname from userinfo as u,sex as s where u.usex=s.sexid
这时的视图view_user是两张表关联起来的,是只读的,不能修改了
第三层:
假设有一个商品表Merchandise,
Mid(商品编号) modeid(格式编号)
54226782542 1
另有一张商品格式表Mode
mid(格式编号)、mname(格式名称)
1 VCD
2 DVD
查询商品的格式信息,需要关联查询
select m.mid,mo.mid,mo.mname from merchaidise as m,mode as mo where m.modeid=mo.mid
结果:
Mid(商品编号) modeid(格式编号) mname(格式名称)
54226782542 1 VCD
查询成功
但你无法把上述的语句直接创建为视图,因为Mode表里的mid列和Merchandise表里的mid列冲突。
也许你会问:不是用m和mo把两个列分别开了吗,为什么不行?
答案就是不行,因为微软考虑到查视图时可以写where条件的,如果上述问题行得通的话,那执行:
select * from view_user where mid=1的时候,mid是商品编号呢,还是格式编号呢?
所以在建立多表连接的视图时,列不能重复