在本教程中,您将学习如何使用CREATE VIEW语句在MySQL中创建视图。

CREATE VIEW语句简介

要在MySQL中创建新视图,请使用CREATE VIEW语句。 在MySQL中创建视图的语法如下:CREATE

[ALGORITHM = {MERGE | TEMPTABLE | UNDEFINED}]

VIEW [database_name].[view_name]

AS

[SELECT statement]

让我们更详细地查看了解以上语法。

视图处理算法

算法属性允许您控制MySQL在创建视图时使用的机制。MySQL提供三种算法:MERGE,TEMP TABLE和UNDEFINED。

- 使用MERGE算法,MySQL首先将输入查询与定义视图的SELECT语句组合成单个查询。 然后MySQL执行组合查询以返回结果集。如果SELECT语句包含聚合函数,如:MIN, MAX, SUM, COUNT, AVG或DISTINCT, GROUP BY, HAVING, LIMIT, UNION, UNION ALL,子查询 等等则不允许MERGE算法。如果SELECT语句没有引用表,则也不允许MERGE算法。如果不允许MERGE算法,MySQL将算法更改为UNDEFINED。 注意,输入查询和视图定义中的查询到一个查询的组合被称为视图决议。

- 使用TEMP TABLE算法,MySQL首先根据定义视图的SELECT语句创建一个临时表,然后对该临时表执行输入查询。因为MySQL必须创建一个临时表来存储结果集,并将数据从基表移动到临时表,TEMP TABLE算法的效率低于MERGE算法。此外,使用TEMP TABLE算法的视图不可更新。UNDEFINED是创建视图时未指定显式算法的默认算法。UNDEFINED算法让MySQL做出选择使用MERGE或TEMP TABLE算法。MySQL优先选择MERGE算法再到TEMP TABLE算法,因为MERGE算法更有效率。

视图名称

在数据库中,视图和表共享相同命名空间,因此,视图和表不能具有相同的名称。 此外,视图的名称必须遵循表命名规则。

SELECT语句

在SELECT语句中,可以从数据库中存在的任何表或视图查询数据。SELECT语句必须遵循几个规则:

- SELECT语句可以在WHERE子句中包含子查询,但不能在FROM子句中。

- SELECT语句不能引用任何变量,包括局部变量,用户变量和会话变量。

- SELECT语句不能引用预处理语句的参数。

注意,SELECT语句不需要引用任何表。

创建MySQL视图示例

创建简单视图

让我们来看看 order_detail 表。可以创建一个表示每个订单的总销售额的视图。CREATE VIEW SalePerOrder AS

SELECT

order_id, SUM(buy_number * price) total

FROM

studymysql.order_detail

GROUP by order_id

ORDER BY total DESC;

如果使用SHOW TABLES命令查看studymysql数据库中的所有表,我们还会看到SalesPerOrder视图显示在列表中。SHOW TABLES;

这是因为视图和表共享同一个命名空间。如要知道哪个对象是视图或表,请使用SHOW FULL TABLES命令,如下所示:

结果集中的 table_type 列指定哪个对象是视图,哪个对象是表(基表)。

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

*

FROM

salePerOrder;

执行上面的语句,结果如下 -

基于一个视图来创建视图

MySQL允许您基于一个视图来创建另一个视图。例如,您可以基于SalesPerOrder视图创建名为大销售订单的视图,以显示总数大于150,000的销售订单,如下所示:CREATE VIEW BigSalesOrder AS

SELECT

order_id, ROUND(total,2) as total

FROM

saleperorder

WHERE

total > 150000;

现在,我们可以从BigSalesOrder视图中查询数据,如下所示:SELECT

order_id, total

FROM

BigSalesOrder;

执行上面的语句,结果如下 -

使用join创建视图

以下是使用INNER JOIN创建视图的示例。视图包含订单号,客户名称和每个订单的总销售额。CREATE VIEW customerOrders AS

SELECT

o.order_number,

c.customer_name,

SUM(buy_number * price) total

FROM

studymysql.order_detail d

INNER JOIN

studymysql.order o ON o.order_id = d.order_id

INNER JOIN

studymysql.customer c ON c.customer_id = o.customer_id

GROUP BY o.order_number

ORDER BY total DESC;

要从customerOrders视图中查询数据,请使用以下查询:SELECT

*

FROM

customerOrders;

执行上面的语句,结果如下 -

使用子查询创建视图

下面说明如何使用子查询创建视图。该视图包含价格高于所有产品的平均价格的产品。CREATE VIEW aboveAvgProducts AS

SELECT

product_code, product_name, price

FROM

studymysql.product

WHERE

price >

(SELECT

AVG(price)

FROM

studymysql.product)

ORDER BY price DESC;

从上述aboveAvgProducts视图中查询数据很简单,如下所示:SELECT

*

FROM

aboveAvgProducts;

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

相关教程MySQL中的视图

数据库视图简介

管理MySQL中的视图

MySQL学习QQ群:418407075

在mysql中 创建视图需要使用_语句_在MySQL中创建视图的X种方式相关推荐

  1. Mysql要在表s中增加一列可用什么语句_要在基本表S中增加一列CN(课程名),可用语句()_学小易找答案...

    [填空题]在SQL中,要删除一个表,应使用的语句是( )TABLE. [单选题]精神检查的方法主要有( ) [单选题]护士从病人的书信.日记了解病人的情况是属于( ) [单选题]显示当前所有数据库的命 ...

  2. sql server 创建唯一性非聚集索引语句_数据库专题—索引原理

    深入浅出数据库索引原理 参见:https://www.cnblogs.com/aspwebchh/p/6652855.html 1.为什么给表加上主键? 1.平时创建表的时候,都会给表加上主键.如果没 ...

  3. this调用语句必须是构造函数中的第一个可执行语句_详解-JavaScript 的 this 指向和绑定...

    JavaScript 中的 new.bind.call.apply 实际这些都离不开 this,因此本文将着重讨论 this,在此过程中分别讲解其他相关知识点. 注意: 本文属于基础篇,请大神绕路.如 ...

  4. mysql select 指定列_MySQL使用select语句查询指定表中指定列(字段)的数据

    本文介绍mysql数据库中执行select查询语句,查询指定列的数据,即指定字段的数据. 再来回顾一下sql语句中的select语句的语法: select 语句的基本语法: select from w ...

  5. 13.4 mysql用户管理 13.5 常用sql语句 13.6 mysql数据库备份恢复

    mysql用户管理 1.创建一个普通用户并授权 [root@gary-tao ~]# mysql -uroot -p'szyino-123' Warning: Using a password on ...

  6. python邮件发送哪个好_最全总结!聊聊 Python 发送邮件的几种方式

    1. 前言 邮件,作为最正式规范的沟通方式,在日常办公过程中经常被用到 我们都知道 Python内置了对 SMTP 的支持,可以发送纯文本.富文本.HTML 等格式的邮件 本文将聊聊利用 Python ...

  7. python repair修复功能_详解Python修复遥感影像条带的两种方式

    GDAL修复Landsat ETM+影像条带 Landsat7 ETM+卫星影像由于卫星传感器故障,导致此后获取的影像出现了条带.如下图所示, 影像中均匀的布满条带. 使用GDAL修复影像条带的代码如 ...

  8. java websocket注解_【websocket】spring boot 集成 websocket 的四种方式

    集成 websocket 的四种方案 1. 原生注解 pom.xml org.springframework.boot spring-boot-starter-websocket WebSocketC ...

  9. drf-路由组件:自动生成Routers路由、 使用方法、视图集中附加action的声明、自动生成路由router的两种方式的URL区别

    目录 一. 自动生成Routers路由 二. 使用方法 1) 创建router对象,并注册视图集,例如 2)添加路由数据 三. 代码演示 四. 视图集中附加action的声明 五. 自动生成路由rou ...

  10. aes key长度_原创 | 浅谈Shiro反序列化获取Key的几种方式

    点击"关注"了解更多信息 关于Apache Shiro反序列化 在shiro≤1.2.4版本,默认使⽤了CookieRememberMeManager,由于AES使用的key泄露, ...

最新文章

  1. 博客摘录:网络管理员的两天
  2. code第一部分数组:第二十二题 偶数次中查找单独出现一次的数
  3. JZOJ 5699. 【gdoi2018 day1】涛涛接苹果(appletree)
  4. matlab寻找函数对应的工具箱
  5. 反馈页面设计_获得设计反馈的艺术
  6. 一次回母校教前端的经历
  7. JUnit 5 –动态测试
  8. -6dB的效果也不错
  9. 看我如何发现(并修复)Python 源代码中的漏洞
  10. iOS 中 UIView 和 CALayer 的关系
  11. android如何去掉自动更新,如何停止Android手机上的应用程序自动更新
  12. PHP将图片转换成base64编码,hash函数
  13. 设计模式详解——模版方法模式
  14. springboot开源热门项目-bootdo修改支持多数据源
  15. 化繁为简|华天软件参数化,将轴承设计变为数与数的组合
  16. 社会工程学:关于一些信息收集的网站
  17. 疯狂填词 mad_libs 第9章9.9.2
  18. Flask学习笔记之g对象
  19. usb disconnect
  20. 算术运算验证码 黑体字体 乱码

热门文章

  1. TCP 实战抓包分析
  2. DevCon 命令与批处理自动禁用启用网卡
  3. 基于NSGA3的swat模型情景的多目标优化算法,python
  4. 穿越回二年级讲CPU工作原理。
  5. 【伸手党福利】开发人员重装系统顺序
  6. group + max函数_了解C ++中max()函数的工作方式
  7. java 去停用词_利用jieba分词并去除停用词
  8. GMSSL双证书认证C/S(Linux版)
  9. chrome浏览器设置思源黑体
  10. 机器学习(Machine Learning)深度学习(Deep Learning)较全面的资料