摘要:在本教程中,您将学习如何使用 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)
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)
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)
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
语句在数据库中创建视图。