实现SQL Server数据库中的视图和查询

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

(9)VIEW_METADATA:指定为引用视图的查询 请求浏览模式的元数据时,SQL Server 将向 DBLIB、 ODBC 和 OLE DB API 返回有关视图的元数据信息, 而不是返回基表或表。浏览模式的元数据是由 SQL Server 向客户端 DB-LIB、ODBC 和 OLE DB API 返 回的附加元数据,它允许客户端 API 实现可更新的客 户端游标。浏览模式的元数据包含有关结果集内的列所 属的基表信息。 对于用 VIEW_METADATA 选项创建 的视图,当描述结果集中视图内的列时,浏览模式的元 数据返回与基表名相对的视图名。当用 VIEW_METADATA 创建视图时,如果该视图具有 INSERT 或 UPDATE INSTEAD OF 触发器,则视图 的所有列(timestamp 除外)都是可更新的。
(3)定义视图的语句是一个 SELECT查询语句。 该语句可以使用多个表或其它视图。若要从创 建视图的 SELECT 子句所引用的对象中选择, 必须具有适当的权限。视图不必是具体某个表 的行和列的简单子集。可以用具有任意复杂性 的 SELECT 子句,使用多个表或其它视图来创 建视图。 (4)在索引视图定义中,SELECT 语句必须是 单个表的语句或带有可选聚合的多表 JOIN。
SELECT子句
SELECT子句用于指定要返回的列,其完整的 语法如下: SELECT [ ALL│DISTINCT ] [ TOP n [PERCENT]] 列名 [[AS] 别名]│别名=表达式 } [ ,...n ]
FROM子句
只要SELECT子句有要查询的列,就必须使 用FROM子句指定进行查询的单个或者多个表。 此外,SELECT语句要查询的数据源除了表以外 还可以是视图,视图相当于一个临时表,其语 法格式如下:
2、简化操作 视图大大简化了用户对数据的操作。因为 在定义视图时,若视图本身就是一个复杂查询 的结果集,这样在每一次执行相同的查询时, 不必重新写这些复杂的查询语句,只要一条简单 的查询视图语句即可。可见视图向用户隐藏了 表与表之间的复杂的连接操作。 3、定制数据 视图能够实现让不同的用户以不同的方式 看到不同或相同的数据集。因此,当有许多不 同水平的用户共用同一数据库时,这显得极为 重要。
(6)WITH CHECK OPTION:强制视图上 执行的所有数据修改语句都必须符合由 SELECT查询语句设置的准则。通过视图修改 数据行时,WITH CHECK OPTION 可确保提 交修改后,仍可通过视图看到修改的数据。 ( 7 ) WITH ENCRYPTION : 表 示 SQL Server 加密包含 CREATE VIEW 语句文本的 系统表列。使用 WITH ENCRYPTION 可防止 将视图作为 SQL Server 复制的一部分发布。
WHERE子句 WHERE子句指定查询的条件,限制返回 的数据行。其语法格式如下: WHERE 指定条件 WHERE子句用于指定搜索条件,过滤不 符合查询条件的数据记录,使用比较灵活且 复杂。可以使用的条件包括比较运算、逻辑 运算、范围、模糊匹配以及未知值等。
一、使用通配符* select * from 表名/视图名 返回from中指定的表中的所有列。
§3 管理视图 1、使用系统存储过程查看视图信息
sp_help 表/视图 sp_helptext 表/视图 sp_depends 表/视图
2、使用T-SQL语句修改视图 ALTER VIEW语句的语法格式为: ALTER VIEW [<数据库名>.][<所有者>.]视图 名[(列名[,...n])] [WITH {ENCRYPTION|SCHEMABINDING|VIEW_METADATA}] AS SELECT查询语句 [WITH CHECK OPTION] 参数说明同CREATE VIEW相同。
3、使用DROP VIEW删除视图 删除视图的语法格式如下。 DROP VIEW 视图名1,…,视图名n 使用该语句一次可以删除多个视图。
§4 通过视图访问数据 使用视图管理表中的数据包括插入、更新 和删除三种操作,在操作时要注意以下几点: 修改视图中的数据时,可以对基于两个以 上基表或视图的视图进行修改,但是不能同时 影响两个或者多个基表,每次修改都只能影响 一个基表。 不能修改那些通过计算得到的列,例如年龄 和平均分等。 若在创建视图时定义了 WITH CHECK OPTION选项,那么使用视图修改基表中的数 据时,必须保证修改后的数据满足定义视图的 限制条件。
二、使用指定的列 select 列名1,列名2,……,列名n from 表名/视图名 返回from中指定的表中的指定列。
三、使用TOP关键字 select top n [percent] 列名
四、使用DISTINCT关键字 使用DISTINCT关键字时, 1、无论遇到多少个空值,只返回一个。 2、表达式只包含一个列名,且不能包含算术 表达式。 3、不能包含text、ntext和image类型字段。 4、是sum、avg和count的可选关键字。
FROM { 表名|视图名 } [ ,...n ]
当有多个数据源时,可以使用逗号“,”分隔, 但是最多只能有16个数据源。数据源也可以像 列一样指定别名,该别名只在当前的SELECT语 句中起作用,方法为:数据源名 AS 别名,或 者数据源名 别名。指定别名的好处在于以较短 的名字代替原本见名知意的长名。
二、视图的优缺点
当对通过视图看到的数据进行修改时,相应 的基本表的数据也要发生变化,同时,若基本表 的数据发生变化,则这种变化也可以自动地反映 到视图中。 视图有很多优点,主要表现在: 1、视点集中 视图集中即是使用户只关心它感兴趣的某些 特定数据和他们所负责的特定任务。这样通过只 允许用户看到视图中所定义的数据而不是视图引 用表中的数据而提高了数据的安全性。
4、合并分割数据 在有些情况下,由于表中数据量太大,故在 表的设计时常将表进行水平分割或垂直分割,但 表的结构的变化却对应用程序产生不良的影响。 如果使用视图就可以重新保持原有的结构关系, 从而使外模式保持不变,原有的应用程序仍可以 通过视图来重载数据。 5、组合分区数据 用户可以把来自不同表的两个或多个查询 结果组合成单一的结果集。这在用户看来是一个 单独的表,称为分区视图。
参数说明: (1)视图名称必须符合标识符规则。可以选择是 否指定视图所有者名称。 (2)CREATE VIEW子句中的列名是视图中显示 的列名。只有在下列情况下,才必须命名 CREATE VIEW 子句中的列名:当列是从算术 表达式、函数或常量派生的,两个或更多的列可 能会具有相同的名称(通常是因为联接),视图 中的某列被赋予了不同于派生来源列的名称。当 然也可以在 SELECT 语句中指派列名。 注意:如果未指定列名,则视图列将获得与 SELECT 语句中的列相同的名称。
(8)SCHEMABINDING:将视图绑定到架 构上。指定 SCHEMABINDING 时,SELECT 查询语句必须包含所引用的表、视图或用户定 义函数的两部分名称 (owner.object)。不能除去 参与用架构绑定子句创建的视图中的表或视图, 除非该视图已被除去或更改,不再具有架构绑 定。否则,SQL Server 会产生错误。另外,如 果对参与具有架构绑定的视图的表执行 ALTER TABLE 语句,而这些语句又会影响该架构绑定 视图的定义,则这些语句将会失败 。
6、安全性 视图可以作为一种安全机制。通过视图用 户只能查看和修改他们所能看到的数据。其它 数据库或表既不可见也不可以访问。如果某一 用户想要访问视图的结果集,必须授予其访问 权限。视图所引用表的访问权限与视图权限的 设置互不影响。 7、视图的缺点 视图的缺点主要表现在其对数据修改的限 制上。
三、使用视图的场合 1)表的行或列的子集。 2)两个或多个表的联合。 3)两个或多个表的连接。 4)其他视图的子集。 5)视图与表的组合。
注意: 一个视图可以基于一个或若干个 基表,也可以基于一个或若干个视图,同时也 可以基于基表和视图的混合体。
Байду номын сангаас
使用Transact-SQL语言创建视图 创建视图的语法格式如下: CREATE VIEW [<数据库名>.][<所有者>.]视图 名[(列名[,...n])] [WITH {ENCRYPTION|SCHEMABINDING|VIEW_METADATA}] AS SELECT查询语句 [WITH CHECK OPTION]
§2 创建视图
创建视图时应该注意以下情况: ①只能在当前数据库中创建视图。 ②视图中最多只能引用1024列。 ③如果视图引用的基表或者视图被删除, 则该视图不能再被使用,直到创建新的基表或 者视图。 ④如果视图中某一列是函数、数学表达式、 常量或者来自多个表的列名相同,则必须为列 定义名称。
⑤当视图所引用不同基表的列中有相同列 名时或者希望给视图中的列指定新的列名时则 需要重新指定列的别名。 ⑥不能在视图上创建索引,不能在规则、 缺省、触发器的定义中引用视图。 ⑦当通过视图查询数据时,SQL Server要 检查以确保语句中涉及的所有数据库对象存在, 而且数据修改语句不能违反数据完整性规则。 ⑧视图的名称必须遵循标识符的规则,且 对每个用户必须是唯一的。此外,该名称不得 与该用户拥有的任何表的名称相同。
执行UPDATE或DELETE命令时,所更新或删除 的数据必须包含在视图的结果集中。 如果视图引用多个表时,无法用DELETE命令删 除数据。 如果视图引用多个表,使用INSERT或UPDATE 语句对视图进行操作时,被插入或更新的列必须属 于同一个表。 视图的字段来自集合函数,则此视图不允许修改 操作。 若视图定义中含有GROUP BY 子句,则此视图 不允许修改操作。 若视图定义中含有DISTINCT短语,则此视图不 允许修改操作。 一个不允许修改操作视图上定义的视图,也不允 许修改操作。
(5)在CREATE VIEW语句中,对于SELECT 查询语句有如下限制: 创建视图的用户必须对该视图所参照或引用 的表或视图具有适当的权限。 在查询语句中,不能包含ORDER BY(如果 要包含的话SELECT子句中要用TOP n [percent])、 COMPUTE或COMPUTE BY关键字。也不能包 含INTO关键字。 不能在临时表中定义视图(不能引用临时表)。
§1 视图基本概念 一、视图基本概念
1.基本表 基本表是独立存在的表。在SQL Server中 创建了一个基本表,那么可以在表中添加记 录,这些记录存放在硬盘上。“学生表”、 “课程表”、“成绩表”等等,都是基本表。
2.视图
视图看上去同表似乎一模一样,具有一组命名的 字段和数据项,但它其实是一个虚拟的表,在物理上 并不实际存在。视图是由查询数据库表产生的,它限 制了用户能看到和修改的数据。视图一旦定义后,就 可以和基本表一样被查询、被删除,也可以在一个视 图基础上再定义新的视图。 视图兼有表和查询的特点:与查询相类似的是, 视图可以用来从一个或多个相关联的表或视图中提取 有用信息;与表相类似的是,视图可以用来更新其中 的信息,并将更新结果永久保存在磁盘上。我们可以 用视图使数据暂时从数据库中分离成为游离数据,以 便在主系统之外收集和修改数据。
§5 SELECT语句
SELECT语句能够从数据库中检索出符合用户需求的数据, 并将结果以表格的形式返回,是SQL Server中使用最频繁的语 句之一。基本语法格式如下: SELECT 列名1 [ ,列名2 ]... [ INTO 新表名 ] FROM 表名1 [ ,表名2 ]... [ WHERE 条件 ] [ GROUP BY 列名列表 ] [ HAVING 条件 ] [ ORDER BY 列名列表 [ASC | DESC] ] 其中,用[ ]表示可选项。 SELECT语句至少包含两个子句:SELECT和FROM, SELECT子句指定要查询的指定表中的列,FROM子句指定查 询的表。
相关文档
最新文档