MySQL CREATE VIEW

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

MySQL CREATE VIEW语句简介

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

CREATE [OR REPLACE] VIEW [db_name.]view_name [(column_list)]
AS
  select-statement;Code language: SQL (Structured Query Language) (sql)

在这个语法中:

首先,在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;Code language: SQL (Structured Query Language) (sql)

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

SHOW TABLES;Code language: SQL (Structured Query Language) (sql)
显示表格视图

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

要了解哪个对象是视图或表,请使用SHOW FULL TABLES命令,如下所示:

SHOW FULL TABLES;Code language: SQL (Structured Query Language) (sql)
显示全表命令

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

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

SELECT * FROM salePerOrder;Code language: SQL (Structured Query Language) (sql)
mysql 创建视图 - 简单视图示例

2) 基于另一个视图示例创建视图

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

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

CREATE VIEW bigSalesOrder AS
    SELECT 
        orderNumber, 
        ROUND(total,2) as total
    FROM
        salePerOrder
    WHERE
        total > 60000;Code language: SQL (Structured Query Language) (sql)

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

SELECT 
    orderNumber, 
    total
FROM
    bigSalesOrder;Code language: SQL (Structured Query Language) (sql)
create a view based on another view

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;Code language: SQL (Structured Query Language) (sql)

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

SELECT * FROM customerOrders 
ORDER BY total DESC;Code language: SQL (Structured Query Language) (sql)

这张图显示了部分输出:

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;Code language: SQL (Structured Query Language) (sql)

aboveAvgProducts查询数据很简单,如下:

SELECT * FROM aboveAvgProducts;Code language: SQL (Structured Query Language) (sql)
带有子查询的mysql视图

5) 创建具有显式视图列的视图示例

此语句使用CREATE VIEW语句基于具有显式视图列的客户和订单表创建新视图:

CREATE VIEW customerOrderStats (
   customerName , 
   orderCount
) 
AS
    SELECT 
        customerName, 
        COUNT(orderNumber)
    FROM
        customers
            INNER JOIN
        orders USING (customerNumber)
    GROUP BY customerName;Code language: SQL (Structured Query Language) (sql)

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

SELECT 
    customerName,
    orderCount
FROM
    customerOrderStats
ORDER BY 
	orderCount, 
    customerName;Code language: SQL (Structured Query Language) (sql)

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

本教程有帮助吗?