登录 |  注册
首页 >  数据库 >  SQL >  SQL VIEW 视图语法

SQL VIEW 视图语法

SQL 视图(Views)

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

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

您可以添加 SQL 函数,在哪里添加,并将语句连接到视图,或者您可以呈现数据,就像数据来自单个表一样。

CREATE VIEW 语法

CREATE
    [OR REPLACE]
    [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
    [DEFINER = user]
    [SQL SECURITY { DEFINER | INVOKER }]
    VIEW view_name [(column_list)]
    AS select_statement
    [WITH [CASCADED | LOCAL] CHECK OPTION]

CREATE VIEW 语句将创建一个新的视图,如果给定 OR REPLACE 子句,也可以替换现有的视图。如果视图不存在,则 CREATE OR REPLACE VIEW 等同于 CREATE VIEW。如果视图确实存在,则 CREATE OR REPLACE VIEW 替换它。

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

视图定义遵守以下约束:

 ● SELECT 语句不能引用系统变量或用户定义的变量。

 ● 在存储程序中,SELECT 语句不能引用程序参数或局部变量。

 ● SELECT 语句不能引用预编译语句参数。

 ● 定义中引用的任何表或视图都必须存在。如果在创建视图之后,定义引用的表或视图被删除,那么使用视图会导致错误。若要检查视图定义是否存在此类问题,请使用 CHECK TABLE 语句。

 ● 定义不能引用 TEMPORARY 表,也不能创建 TEMPORARY 视图。

 ● 不能将触发器与视图关联。

 ● SELECT 语句中列名的别名最大长度64个字符(而不是256个字符的最大别名长度)。

 在视图定义中允许使用 ORDER BY,但是如果使用 ORDER BY 语句从视图中进行选择,则会忽略视图自己的 ORDER BY。

 对于定义中的其他选项或子句,它们被添加到引用视图的语句的选项或子句中,但效果是不确定的。例如,如果视图定义包含 LIMIT 子句,使用 LIMIT 子句从视图中进行查询,则应用哪个限制是不确定的。同样的原则也适用于 SELECT 关键字后面的 ALL、DISTINCT 或 SQL_SMALL_RESULT 等选项,以及 INTO、FOR UPDATE、FOR SHARE、LOCK IN SHARE MODE 和 PROCEDURE 等子句。

SQL CREATE VIEW 实例

"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 OR REPLACE VIEW [Current Product List] AS                
SELECT ProductID,ProductName,Category                
FROM Products                
WHERE Discontinued=No

SQL 撤销视图

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

SQL DROP VIEW 语法

DROP VIEW view_name
上一篇: SQL AUTO INCREMENT字段
下一篇: SQLServer和MySQL中的Date函数
推荐文章
  • mysql只支持一种join算法:Nested-LoopJoin(嵌套循环连接),但Nested-LoopJoin有三种变种:SimpleNested-LoopJoin,IndexNested-LoopJoin,BlockNested-LoopJoin(简单-索引-缓冲区)原理:1.SimpleNe
  • redis是一个内存数据库,一旦断电或服务器进程退出,内存数据库中的数据将全部丢失,所以需要redis持久化 redis持久化就是把数据保存在磁盘上,利用永久性存储介质将数据保存,在特定的时间将保存的数据进行恢复的工作机制redis提供两种持久化机制RDB:存储数据结果,关注点在数据AOF:存储操作
  • 通过SQL的执行过程来介绍MySQL的基础结构.     首先有一个user_info表,表里有一个id字段,执行下面这条查询语句:Select * form user_info where i
  • 索引(Index)是帮助MySQL高效获取数据的数据结构,索引的目的在于提高查询效率,就像字典和书籍的目录一样,有了目录,可以帮助你快速查找你需要的内容。可以理解为一个排好序的快速查找数据结构。也就是
  • 说到数据库事务,大家脑子里一定很容易蹦出一堆事务的相关知识,如事务的ACID特性,隔离级别,解决的问题(脏读,不可重复读,幻读)等等,但是可能很少有人真正的清楚事务的这些特性又是怎么实现的,为什么要有四个隔离级别。今天我们就先来聊聊MySQL中事务的隔离性的实现原理,后续还会继续出文章分析其他特性的
  • 前面我们系统了解了一个查询语句的执行流程,并介绍了执行过程中涉及的处理模块。相信你还记得,一条查询语句的执行过程一般是经过连接器、分析器、优化器、执行器等功能模块,最后到达存储引擎。那么,一条更新语句
学习大纲