SQL语法整理[4]——视图
2011-12-12 08:29
288 查看
SQL语法整理[4]——视图
视图是一个逻辑的概念,也称之为虚拟的表,对于外部的用户而言,视图与表的结构一样被使用.使用视图主要是为用户提供一个快捷的访问方法,或者屏蔽用户对真实数据源直接访问.视图中实际上封装的仅仅是一些SELECT查询语句,而并非真实的数据,所以被称之为虚拟的表。作为虚拟的表仍然有表的一些属性,对表中数据的添加、修改、删除一样可以作用于虚拟表,即视图上。
视图也被称为虚拟的表,其内容由SELECT查询语句定义。同真实的表一样,视图包含了一系列带有名称的列和行的数据。但是,视图并不在数据库中以存储的数据集合形式存在。用行和列的数据,来自由定义视图的查询所引用的表,并且在引用视图时动态生成。视图一经定义,便存储在数据库中,与其相对应的数据并没有像表那样又在数据库中再存储一份。通过视图看到的数据只是存放在基表中的数据。对视图的操作与对表的操作一样,可以查询、修改、删除。通过对视图看到的数据进行修改时,相应的基表的数据也要发生变化,同时,若基表的数据发生变化,这种变化也可以自动地反映到视图中。
视图和查询最主要的差别是:视图的存储是作为数据库开发者设计数据库的一部分;而查询仅仅是对表的查询并非数据库设计的一部分。
创建一个能同时反映学生与老师信息的视图。
/*创建名称为v_student_teacher的视图*/
USE school
GO
CREATE VIEW v_student_teacher
AS
SELECT s.id AS 'student_id',
s.name AS 'student_name', ----学生姓名
s.gender AS 'student_gender', ----学生性别
s.age AS 'student_age', ----学生年龄
s.grade, ----学生年级
s.class, ----学生班级
s.teacher_id AS 's_teacher_id', ----老师编号
s.parents_id, ----父母编号
t.id AS 'teacher_id', ----老师编号
t.name AS 'teacher_name', ----老师姓名
t.gender AS 'teacher_gender', ----老师性别
t.age AS 'teacher_age', ----老师年龄
t. subject, ----所教的学科
t. teaching_age, ----教学年龄
t. position, ----工作岗位
t. salary ----岗位工资
FROM student AS s
INNER JOIN
teachers AS t ON s.teacher_id = t.id
GO
/*使用视图*/
USE school
GO
SELECt * FROM v_student_teacher
GO
创建视图
CREATE VIEW view_name
AS
select_statement
/*建立简单视图v_student*/
USE school
GO
---创建视图v_student
CREATE VIEW v_student AS
SELECT * FROM student
GO
<基表变化则试图将发生相应的变化>
通过视图修改数据
通过更新视图数据(包括添加、修改和删除)可以修改基本表数据。但并不是所有的视图都可以更新,只有对满足可更新条件的视图才能进行更新。
任何修改(包括UPDATE、INSERT和DELETE语句)都只能引用一个基本表的列(要修改的列必须属于视图定义中的同一个基表)。
即使是可更新视图,也不能随意更新数据。如果视图所依赖的基本表有多个时,不能向该视图添加数据,因为这将影响多个基本表。
向可更新视图中添加数据时,系统会按照添加记录的键值所属的范围,将数据添加到其键值所属的基本表中;修改数据时,若视图依赖于多个基本表,那么一次只能修改一个基本表中的数据;删除数据时,若视图依赖于多个基本表,就不能通过视图删除数据。
通过视图添加数据
INSERT INTO view_name(column_name…)
VALUES(value1,value2,…)///基本表也发生了相应的变化
INSERT INTO v_student_teacher
(student_id,student_name,student_age,graduation,cardno)
VALUES ///未指定的列都赋值为NULL。。
(2006013,'小明',24,'已毕业','220200030304304042')
GO
通过视图更改数据
在视图使用了多个底层基表联接的情况下,每次更新操作只能来自某一个基表中的数据列的值。
语法:
UPDATE view_name
SET column_name1=<values>
WHERE column_name2=<values>
通过视图删除数据
当一个视图由两个或两个以上基表构成时,不允许通过视图删除基表中的数据,即只能通过单基表视图删除数据。
语法:
DELETE FROM view_name
WHERE column_name=<values>
修改视图
ALTER VIEW view_name
AS select_statement
/*重命名视图student_teachers为v_student_teachers */
EXEC sp_rename 'student_teachers','v_student_teachers'
/*删除视图v_student_teachers*/
DROP VIEW v_student_teachers
——大二的期末考试整理 peace_power@126.com
视图是一个逻辑的概念,也称之为虚拟的表,对于外部的用户而言,视图与表的结构一样被使用.使用视图主要是为用户提供一个快捷的访问方法,或者屏蔽用户对真实数据源直接访问.视图中实际上封装的仅仅是一些SELECT查询语句,而并非真实的数据,所以被称之为虚拟的表。作为虚拟的表仍然有表的一些属性,对表中数据的添加、修改、删除一样可以作用于虚拟表,即视图上。
视图也被称为虚拟的表,其内容由SELECT查询语句定义。同真实的表一样,视图包含了一系列带有名称的列和行的数据。但是,视图并不在数据库中以存储的数据集合形式存在。用行和列的数据,来自由定义视图的查询所引用的表,并且在引用视图时动态生成。视图一经定义,便存储在数据库中,与其相对应的数据并没有像表那样又在数据库中再存储一份。通过视图看到的数据只是存放在基表中的数据。对视图的操作与对表的操作一样,可以查询、修改、删除。通过对视图看到的数据进行修改时,相应的基表的数据也要发生变化,同时,若基表的数据发生变化,这种变化也可以自动地反映到视图中。
视图和查询最主要的差别是:视图的存储是作为数据库开发者设计数据库的一部分;而查询仅仅是对表的查询并非数据库设计的一部分。
创建一个能同时反映学生与老师信息的视图。
/*创建名称为v_student_teacher的视图*/
USE school
GO
CREATE VIEW v_student_teacher
AS
SELECT s.id AS 'student_id',
s.name AS 'student_name', ----学生姓名
s.gender AS 'student_gender', ----学生性别
s.age AS 'student_age', ----学生年龄
s.grade, ----学生年级
s.class, ----学生班级
s.teacher_id AS 's_teacher_id', ----老师编号
s.parents_id, ----父母编号
t.id AS 'teacher_id', ----老师编号
t.name AS 'teacher_name', ----老师姓名
t.gender AS 'teacher_gender', ----老师性别
t.age AS 'teacher_age', ----老师年龄
t. subject, ----所教的学科
t. teaching_age, ----教学年龄
t. position, ----工作岗位
t. salary ----岗位工资
FROM student AS s
INNER JOIN
teachers AS t ON s.teacher_id = t.id
GO
/*使用视图*/
USE school
GO
SELECt * FROM v_student_teacher
GO
创建视图
CREATE VIEW view_name
AS
select_statement
/*建立简单视图v_student*/
USE school
GO
---创建视图v_student
CREATE VIEW v_student AS
SELECT * FROM student
GO
<基表变化则试图将发生相应的变化>
通过视图修改数据
通过更新视图数据(包括添加、修改和删除)可以修改基本表数据。但并不是所有的视图都可以更新,只有对满足可更新条件的视图才能进行更新。
任何修改(包括UPDATE、INSERT和DELETE语句)都只能引用一个基本表的列(要修改的列必须属于视图定义中的同一个基表)。
即使是可更新视图,也不能随意更新数据。如果视图所依赖的基本表有多个时,不能向该视图添加数据,因为这将影响多个基本表。
向可更新视图中添加数据时,系统会按照添加记录的键值所属的范围,将数据添加到其键值所属的基本表中;修改数据时,若视图依赖于多个基本表,那么一次只能修改一个基本表中的数据;删除数据时,若视图依赖于多个基本表,就不能通过视图删除数据。
通过视图添加数据
INSERT INTO view_name(column_name…)
VALUES(value1,value2,…)///基本表也发生了相应的变化
INSERT INTO v_student_teacher
(student_id,student_name,student_age,graduation,cardno)
VALUES ///未指定的列都赋值为NULL。。
(2006013,'小明',24,'已毕业','220200030304304042')
GO
通过视图更改数据
在视图使用了多个底层基表联接的情况下,每次更新操作只能来自某一个基表中的数据列的值。
语法:
UPDATE view_name
SET column_name1=<values>
WHERE column_name2=<values>
通过视图删除数据
当一个视图由两个或两个以上基表构成时,不允许通过视图删除基表中的数据,即只能通过单基表视图删除数据。
语法:
DELETE FROM view_name
WHERE column_name=<values>
修改视图
ALTER VIEW view_name
AS select_statement
/*重命名视图student_teachers为v_student_teachers */
EXEC sp_rename 'student_teachers','v_student_teachers'
/*删除视图v_student_teachers*/
DROP VIEW v_student_teachers
——大二的期末考试整理 peace_power@126.com
相关文章推荐
- 常见实用的SQL语句、存储过程、游标、函数、视图(不断整理中)
- 数据库语言(一):SQL语法实例整理
- sql笔记整理之索引和视图
- SQL语法整理[1]——创建数据库
- SQL server 学习(1)--SQL常用语法命令整理
- SQL知识整理三:变量、全局变量、视图、事务、异常
- SQL中视图整理
- SQL语法整理[3]——表的管理
- sql 视图语法和简单例子
- SQL语句 - 1 - 语法整理
- SQL语法整理[2]——用主外键实现表关联及数据库管理
- SQL语法的一些整理
- DBCC大全集之(适用版本MS SQLServer 2008 R2)----DBCC INDEXDEFRAG指定表或视图的索引碎片整理
- sql 创建视图语法示例
- SQL语法精讲(包括建库、建表、建视图、查询、增加、删除、修改)
- sql创建视图语法示例
- SQL语法整理[6]——函数
- 知识整理:sql 视图
- SQL语法整理[5]——存储过程
- SQL知识整理三:变量、全局变量、视图、事务、异常