MySQL创建视图

时间:2019-11-20 08:52:13  来源:igfitidea点击:

简介:在本教程中,您将学习如何使用MySQL CREATE VIEW语句在数据库中创建新视图。

MySQL CREATE VIEW语句简介

CREATE VIEW语句在数据库中创建一个新视图。
这是CREATE VIEW语句的基本语法:

CREATE [OR REPLACE] VIEW [db_name.]view_name [(column_list)]
AS
  select-statement;

使用以下语法:

首先,在CREATE VIEW关键字之后指定要创建的视图的名称。
视图的名称在数据库中是唯一的。
因为同一数据库中的视图和表共享相同的名称空间,所以视图的名称不能与现有表的名称相同。

其次,如果要替换现有视图(如果该视图已存在),请使用OR REPLACE选项。
如果该视图不存在,则OR REPLACE无效。

第三,指定视图的列列表。
默认情况下,视图的列是从SELECT语句的选择列表派生的。
但是,您可以通过在视图名称后的括号中列出它们来显式指定视图的列列表。

最后,指定定义视图的SELECT语句。
SELECT语句可以查询表或视图中的数据。
MySQL允许您在SELECT语句中使用ORDER BY子句,但是如果您从具有自己的ORDER BY子句的查询中选择视图,则将其忽略。

默认情况下,CREATE VIEW语句在当前数据库中创建一个视图。
如果要在给定的数据库中显式创建视图,则可以使用数据库名称来限定视图名称。

MySQL CREATE VIEW示例

让我们举一个使用CREATE VIEW语句创建新视图的示例。

1)创建一个简单的视图示例

让我们看一下示例数据库中的orderDetails表:

该语句使用CREATE VIEW语句创建一个表示每个订单总销售额的视图。

CREATE VIEW salePerOrder AS
    SELECT 
        orderNumber, 
        SUM(quantityOrdered * priceEach) total
    FROM
        orderDetails
    GROUP by orderNumber
    ORDER BY total DESC;

如果使用SHOW TABLE命令查看classicmodels数据库中的所有表,则将看到viewsalesPerOrder显示在列表中。

SHOW TABLES;

这是因为视图和表共享前面提到的相同的名称空间。

要知道哪个对象是视图或表,可以使用SHOW FULL TABLES命令,如下所示:

SHOW FULL TABLES;

结果集中的table_type列指定对象的类型:视图或表(基础表)。

如果要查询每个销售订单的总销售额,只需要对SalePerOrder视图执行一个简单的SELECT语句,如下所示:

SELECT * FROM salePerOrder;

2)根据另一个视图示例创建一个视图

MySQL允许您基于另一个视图创建一个视图。

例如,您可以基于salesPerOrder视图创建一个名为bigSalesOrder的视图,以显示总数大于60,000的每个销售订单,如下所示:

CREATE VIEW bigSalesOrder AS
    SELECT 
        orderNumber, 
        ROUND(total,2) as total
    FROM
        salePerOrder
    WHERE
        total > 60000;

现在,您可以从bigSalesOrder视图中查询数据,如下所示:

SELECT 
    orderNumber, 
    total
FROM
    bigSalesOrder;

3)使用连接示例创建视图

以下示例使用CREATE VIEW语句创建基于多个表的视图。
它使用INNER JOIN子句来联接表。

CREATE OR REPLACE VIEW customerOrders AS
SELECT 
    orderNumber,
    customerName,
    SUM(quantityOrdered * priceEach) total
FROM
    orderDetails
INNER JOIN orders o USING (orderNumber)
INNER JOIN customers USING (customerNumber)
GROUP BY orderNumber;

该语句从customerOrders视图中选择数据:

SELECT * FROM customerOrders 
ORDER BY total DESC;

此图显示了部分输出:

4)使用子查询示例创建视图

以下示例使用CREATE VIEW语句创建一个视图,该视图的SELECT语句使用子查询。
该视图包含购买价格高于所有产品平均价格的产品。

CREATE VIEW aboveAvgProducts AS
    SELECT 
        productCode, 
        productName, 
        buyPrice
    FROM
        products
    WHERE
        buyPrice > (
            SELECT 
                AVG(buyPrice)
            FROM
                products)
    ORDER BY buyPrice DESC;

来自上面的AvgProducts的查询数据很简单,如下所示:

SELECT * FROM aboveAvgProducts;

5)使用显式视图列创建视图的示例

该语句使用CREATE VIEW语句基于具有显式视图列的customers和orders表创建新视图:

CREATE VIEW customerOrderStats (
   customerName , 
   orderCount
) 
AS
    SELECT 
        customerName, 
        COUNT(orderNumber)
    FROM
        customers
            INNER JOIN
        orders USING (customerNumber)
    GROUP BY customerName;

此查询从customerOrderStats视图返回数据:

SELECT 
    customerName,
    orderCount
FROM
    customerOrderStats
ORDER BY 
	orderCount, 
    customerName;

在本教程中,我们向您展示了如何使用MySQL CREATE VIEW语句在数据库中创建视图。