工作专题MySQL学习MySQL

MySQL视图之我见

2016-05-30  本文已影响4518人  孙进不后退

最近项目上有使用到数据库视图,觉得需要把相关的知识整理一下方便学习。今天先简单介绍一下视图的概念和一些基本原理。

什么是数据库视图

数据库视图的创建是基于SQL SELECT queryJOIN的。视图和表很相似,它也包含行和列,所以可以直接对它进行查询操作。另外大多数的数据库同样允许进行UPADTE操作,但必须满足一定的条件。视图的数据结构如图:

image

我们需要理解,数据库并没有存储视图所关联的数据,存储的只是视图的定义也就是相应的SQL SELECT and JOIN

那么使用数据库视图到底有哪些优势呢:

MySQL View

MySQL从5.x版本支持视图,并且基本符合SQL: 2003标准。
MySQL中执行查询视图的方式有一下两种:

如果创建视图的时候并未指定查询方式,MySQL会默认优先使用第一种,但如果视图的查询声明中的SELECT使用了聚合函数(MIN, MAX, SUM, COUNT, AVG, etc., or DISTINCT, GROUP BY, HAVING, LIMIT, UNION, UNION ALL, subquery.),那么视图查询会使用第二种方式。

Create View

创建MySQL视图可以使用CREATE VIEW声明:

CREATE 
   [ALGORITHM = {MERGE  | TEMPTABLE | UNDEFINED}]
VIEW [database_name].[view_name] 
AS
[SELECT  statement]

ALGORITHM:

MySQL有三种视图执行策略, 分别是MERGE, TEMPTABLE, UNDEFINED.

View Name

视图的名称,在MySQL中视图名和表名使用同一命名空间,这意味这视图名不能和表名重复并且要符合表名的命名规范。

Select Statement

在视图的查询声明中你可以查询所有数据库中已存在的表的数据,有以下集中规则:

Note: 查询声明的From中可以引用其他视图

Example

CREATE VIEW customerOrders AS
    SELECT 
        d.orderNumber,
        customerName,
        SUM(quantityOrdered * priceEach) total
    FROM
        orderDetails d
            INNER JOIN
        orders o ON o.orderNumber = d.orderNumber
            INNER JOIN
        customers c ON c.customerNumber = c.customerNumber
    GROUP BY d.orderNumber
    ORDER BY total DESC;
CREATE VIEW aboveAvgProducts AS
    SELECT 
        productCode, productName, buyPrice
    FROM
        products
    WHERE
        buyPrice > 
 (SELECT 
                AVG(buyPrice)
            FROM
                products)
    ORDER BY buyPrice DESC;

查询视图

SELECT * FROM customerOrders;
上一篇下一篇

猜你喜欢

热点阅读