SQL 创建、更新和删除视图的方法

视图是可视化的表。

本章讲解如何创建、更新和删除视图。

SQL CREATE VIEW 语句

在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表。

视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。

您可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,也可以呈现数据,就像这些数据来自于某个单一的表一样。

SQL CREATE VIEW 语法

CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition

注释:视图总是显示最新的数据!每当用户查询视图时,数据库引擎通过使用视图的 SQL 语句重建数据。

SQL CREATE VIEW 创建实例

样本数据库 Northwind 拥有一些被默认安装的视图。

视图 "Current Product List" 会从 "Products" 表列出所有正在使用的产品(未停产的产品)。这个视图使用下面的 SQL 创建:

CREATE VIEW [Current Product List] AS
SELECT ProductID,ProductName
FROM Products
WHERE Discontinued=No

我们可以像这样查询上面这个视图:

SELECT * FROM [Current Product List]

Northwind 样本数据库的另一个视图会选取 "Products" 表中所有单位价格高于平均单位价格的产品:

CREATE VIEW [Products Above Average Price] AS
SELECT ProductName,UnitPrice
FROM Products
WHERE UnitPrice>(SELECT AVG(UnitPrice) FROM Products)

我们可以像这样查询上面这个视图:

SELECT * FROM [Products Above Average Price]

Northwind 样本数据库的另一个视图会计算在 1997 年每个种类的销售总数。请注意,这个视图会从另一个名为 "Product Sales for 1997" 的视图那里选取数据:

CREATE VIEW [Category Sales For 1997] AS
SELECT DISTINCT CategoryName,Sum(ProductSales) AS CategorySales
FROM [Product Sales for 1997]
GROUP BY CategoryName

我们可以像这样查询上面这个视图:

SELECT * FROM [Category Sales For 1997]

我们也可以向查询添加条件。现在,我们仅仅需要查看 "Beverages" 类的销售总数:

SELECT * FROM [Category Sales For 1997]
WHERE CategoryName='Beverages'

SQL 更新视图

您可以使用下面的语法来更新视图:

SQL CREATE OR REPLACE VIEW 语法

CREATE OR REPLACE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition

现在,我们希望向 "Current Product List" 视图添加 "Category" 列。我们将通过下列 SQL 更新视图:

CREATE VIEW [Current Product List] AS
SELECT ProductID,ProductName,Category
FROM Products
WHERE Discontinued=No

SQL Server

ALTER VIEW [ schema_name . ] view_name [ ( column [ ,...n ] ) ]
[ WITH <view_attribute> [ ,...n ] ]
AS select_statement
[ WITH CHECK OPTION ] [ ; ]

<view_attribute> ::=
{
  [ ENCRYPTION ]
  [ SCHEMABINDING ]
  [ VIEW_METADATA ]
} 
  • schema_name: 视图所属架构的名称。
  • view_name: 要更改的视图。
  • column: 将成为指定视图的一部分的一个或多个列的名称(以逗号分隔)。

SQL 撤销视图

您可以通过 DROP VIEW 命令来删除视图。

SQL DROP VIEW 语法

DROP VIEW view_name
(0)

相关推荐

  • SQL Server视图的讲解

    在初期的工作中,要做一个系统登录验证,翻阅同事做的登录验证,发现同事们做用户名验证时,查的结果集来自一个视图,之前也弄过视图,但很少去仔细看过有关方面的详细知识,于是特意百度谷歌了一下,总结如下知识: 视图,是基于SQL语句的结果集的可视化表.从用户角度来看,一个视图是从一个特定的角度来查看数据库中的数据.从数据库系统内部来看,一个视图是由SELECT语句组成的查询定义的虚拟表.从数据库系统内部来看,视图是由一张或多张表中的数据组成的,从数据库系统外部来看,视图就如同一张表一样,对表能够进行的一

  • 浅谈MySql 视图、触发器以及存储过程

    视图 什么是视图?视图的作用是什么? 视图(view)是一种虚拟存在的表,是一个逻辑表,它本身是不包含数据的.作为一个select语句保存在数据字典中的. 通过视图,可以展现基表(用来创建视图的表叫做基表base table)的部分数据,说白了视图的数据就是来自于基表. 视图的优点: 简单:使用视图的用户完全不需要关心后面对应的表的结构.关联条件和筛选条件,对用户来说已经是过滤好的复合条件的结果集. 安全:使用视图的用户只能访问他们被允许查询的结果集,对表的权限管理并不能限制到某个行某个列,但是

  • mysql视图之管理视图实例详解【增删改查操作】

    本文实例讲述了mysql视图之管理视图操作.分享给大家供大家参考,具体如下: mysql提供了用于显示视图定义的SHOW CREATE VIEW语句,我们来看下语法结构: SHOW CREATE VIEW [database_name].[view_ name]; 要显示视图的定义,需要在SHOW CREATE VIEW子句之后指定视图的名称,我们先来根据employees表创建一个简单的视图用来显示公司组织结构,完事在进行演示: CREATE VIEW organization AS SELE

  • SQLSERVER对加密的存储过程、视图、触发器进行解密(推荐)

    加密测试的存储过程 IF EXISTS(SELECT 1 FROM SYSOBJECTS WHERE TYPE='P' AND NAME='P_TEST') DROP PROCEDURE P_TEST GO CREATE PROCEDURE P_TEST(@USERNAME VARCHAR(20),@MSG VARCHAR(20) OUTPUT) WITH ENCRYPTION AS BEGIN IF(SELECT COUNT(1) FROM Custs WHERE NAME=@USERNAME

  • mysql视图之创建视图(CREATE VIEW)和使用限制实例详解

    本文实例讲述了mysql视图之创建视图(CREATE VIEW)和使用限制.分享给大家供大家参考,具体如下: mysql5.x 版本之后支持数据库视图,在mysql中,视图的几乎特征符合SQL:2003标准. mysql以两种方式处理对视图的查询: 第一种方式,MySQL会根据视图定义语句创建一个临时表,并在此临时表上执行传入查询. 第二种方式,MySQL将传入查询与查询定义为一个查询并执行组合查询. mysql支持版本系统的视图,当每次视图被更改或替换时,视图的副本将在驻留在特定数据库文件夹的

  • SQL 创建、更新和删除视图的方法

    视图是可视化的表. 本章讲解如何创建.更新和删除视图. SQL CREATE VIEW 语句 在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表. 视图包含行和列,就像一个真实的表.视图中的字段就是来自一个或多个数据库中的真实的表中的字段. 您可以向视图添加 SQL 函数.WHERE 以及 JOIN 语句,也可以呈现数据,就像这些数据来自于某个单一的表一样. SQL CREATE VIEW 语法 CREATE VIEW view_name AS SELECT column_name(s

  • php+mysqli实现批量执行插入、更新及删除数据的方法

    本文实例讲述了php+mysqli实现批量执行插入.更新及删除数据的方法.分享给大家供大家参考.具体如下: mysqli批量执行插入/更新/删除数据,函数为 multi_query(). 下面的代码只是批量插入数据,事实上,插入数据.更新数据.删除数据等可以混合一起执行.查询时使用该函数,读取数据有点不太一样,具体参考如下代码: <?php //1.创建数据库连接对象 $mysqli = new MySQLi("localhost","root","

  • Javascript动态创建表格及删除行列的方法

    本文实例讲述了Javascript动态创建表格及删除行列的方法.分享给大家供大家参考.具体实现方法如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"

  • Centos 6.9环境下创建用户及删除用户的方法

    本文实例讲述了Centos 6.9环境下创建用户及删除用户的方法.分享给大家供大家参考,具体如下: 根下单独创建目录 mkdir -p /weftp 创建用户weftp useradd -d /weftp/wq weftp 赋予用户权限 chown -R weftp /weftp/wq/* 用户配置密码 passwd weftp 删除用户 userdel weftp 删除用户目录 rm -rf /weftp/wq 删除系统创建的用户邮箱 rm -rf /var/spool/mail/weftp

  • Android中创建快捷方式及删除快捷方式实现方法

    /** * * 创建快捷方式 * @param map 快捷方式图标 * @param appName 快捷方式标题 * @param appUrl 快捷方式打开的地址 * @param iconUrl 快捷方式图标地址 * * */ public static void createShortcut(Context activity ,Bitmap map ,String appName ,String appUrl ,String iconUrl){ Intent shortcut = ne

  • sql查询语句教程之插入、更新和删除数据实例

    目录 前言 1.插入数据 1.1 为表的所有字段插入数据 1.insert语句中不指定具体的字段名 2.insert语句中列出所有字段 1.2 为表的指定字段插入数据 1.3 同时插入多条记录 1.4 将查询结果插入到表中 2.更新数据 3.删除数据 总结 前言 数据库通过插入.更新和删除等方式来改变表中的记录.插入数据是向表中插入新的记录,通过 INSERT 语句来实现.更新数据是改变表中已经存在的数据,使用UPDATE 语句来实现.删除数据是删除表中不再使用的数据,通过DELETE 语句来实

  • 在ASP.NET 2.0中操作数据之十六:概述插入、更新和删除数据

    导言 结束前面的几节,我们已经探讨过了如何使用GridView.DetailsView和FormView控件来显示数据.这些控件简单地操作提供给它的数据.一般地,这些控件通过使用一个数据源控件,例如ObjectDataSource来存取数据.我们已经看过了ObjectDataSource是如何在ASP.NET页面和潜在的数据之间扮演一个代理的角色.当一个GridView需要显示数据时,它调用ObjectDataSource的Select()方法,这个方法转而调用一个来自我们的业务逻辑层(BLL)

  • mysql视图之创建可更新视图的方法详解

    本文实例讲述了mysql视图之创建可更新视图的方法.分享给大家供大家参考,具体如下: 我们知道,在mysql中,视图不仅是可查询的,而且是可更新的.这意味着我们可以使用insert或update语句通过可更新视图插入或更新基表的行. 另外,我们还可以使用delete语句通过视图删除底层表的行.但是,要创建可更新视图,定义视图的select语句不能包含以下任何元素: 聚合函数,如:min,max,sum,avg,count等. DISTINCT子句 GROUP BY子句 HAVING子句 左连接或

  • MySQL查看、创建和删除索引的方法

    本文实例讲述了MySQL查看.创建和删除索引的方法.分享给大家供大家参考.具体如下: 1.索引作用 在索引列上,除了上面提到的有序查找之外,数据库利用各种各样的快速定位技术,能够大大提高查询效率.特别是当数据量非常大,查询涉及多个表时,使用索引往往能使查询速度加快成千上万倍. 例如,有3个未索引的表t1.t2.t3,分别只包含列c1.c2.c3,每个表分别含有1000行数据组成,指为1-1000的数值,查找对应值相等行的查询如下所示. SELECT c1,c2,c3 FROM t1,t2,t3

  • Hibernate+JDBC实现批量插入、更新及删除的方法详解

    本文实例讲述了Hibernate JDBC实现批量插入.更新及删除的方法.分享给大家供大家参考,具体如下: 一.批量插入(两种方式) 1. 通过Hibernate缓存 如果这样写代码进行批量插入(初始设想): package com.anlw.util; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.

随机推荐