视图

视图与表

视图是一个虚拟表,即视图所对应的数据不进行实际存储。数据库中只存储视图的定义,对视图的数据进行操作时,系统根据视图的定义去操作与视图相关联的基本表。

 

视图一经定义以后,就可以像表一样被查询,修改,删除和更新。不过不建议对视图进行修改,删除和更新的操作。视图主要还是用来做查询用的。

 

视图的优点:

  • 为用户集中数据,简化用户的数据查询和处理
  • 屏蔽数据库的复杂性
  • 简化用户权限管理
  • 便于数据共享
  • 可以重新组织数据以便输出到其他应用程序中

使用视图注意事项:

  • 只有当前数据库才能创建视图
  • 视图不能与表同名
  • 不能把规则,默认值或触发器与视图关联
  • 不能在视图上建立任何索引,包括全文索引

创建视图:

CREATE VIEW CS_KC WITH ENCRYPTION
AS
SELECT XS.学号,课程号,成绩
FROM XS, XS_KC
WHERE XS.学号 = XS_KC.学号 AND 专业名 = '计算机'
WITH CHECK OPTION

WITH ENCRYPTION: 说明存储CREATE VIEW语句时进行加密。

WITH CHECK OPTION: 指在视图上所进行的修改都要符合select_statement所指定的限制条件

 

例子2:创建计算机专业学生的平均成绩视图CS_KC_AVG,包括学号(在视图中列名为num)和平均成绩(在视图中列名为score_avg).

CREATE VIEW CS_KC_AVG(num, score_avg)
AS
SELECT 学号,AVG(成绩)
FROM CS_KC
GROUP BY 学号

SQL UNION 操作符
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。

请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。

SQL UNION 语法
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。

SQL UNION ALL 语法
SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2
另外,UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。
下面的例子中使用的原始表:
Employees_China:
E_ID E_Name
01 Zhang, Hua
02 Wang, Wei
03 Carter, Thomas
04 Yang, Ming

Employees_USA:
E_ID E_Name
01 Adams, John
02 Bush, George
03 Carter, Thomas
04 Gates, Bill
使用 UNION 命令
实例
列出所有在中国和美国的不同的雇员名:

SELECT E_Name FROM Employees_China
UNION
SELECT E_Name FROM Employees_USA
结果
E_Name
Zhang, Hua
Wang, Wei
Carter, Thomas
Yang, Ming
Adams, John
Bush, George
Gates, Bill

注释:这个命令无法列出在中国和美国的所有雇员。在上面的例子中,我们有两个名字相同的雇员,他们当中只有一个人被列出来了。UNION 命令只会选取不同的值。
UNION ALL
UNION ALL 命令和 UNION 命令几乎是等效的,不过 UNION ALL 命令会列出所有的值。

SQL Statement 1
UNION ALL
SQL Statement 2
使用 UNION ALL 命令
实例:
列出在中国和美国的所有的雇员:

SELECT E_Name FROM Employees_China
UNION ALL
SELECT E_Name FROM Employees_USA
结果
E_Name
Zhang, Hua
Wang, Wei
Carter, Thomas
Yang, Ming
Adams, John
Bush, George
Carter, Thomas
Gates, Bill

posted @ 2010-07-08 11:54  类型安全的心  阅读(494)  评论(0编辑  收藏  举报