在mysql中 创建视图需要使用_语句_在MySQL中创建视图的X种方式
在本教程中,您将学习如何使用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种方式相关推荐
- Mysql要在表s中增加一列可用什么语句_要在基本表S中增加一列CN(课程名),可用语句()_学小易找答案...
[填空题]在SQL中,要删除一个表,应使用的语句是( )TABLE. [单选题]精神检查的方法主要有( ) [单选题]护士从病人的书信.日记了解病人的情况是属于( ) [单选题]显示当前所有数据库的命 ...
- sql server 创建唯一性非聚集索引语句_数据库专题—索引原理
深入浅出数据库索引原理 参见:https://www.cnblogs.com/aspwebchh/p/6652855.html 1.为什么给表加上主键? 1.平时创建表的时候,都会给表加上主键.如果没 ...
- this调用语句必须是构造函数中的第一个可执行语句_详解-JavaScript 的 this 指向和绑定...
JavaScript 中的 new.bind.call.apply 实际这些都离不开 this,因此本文将着重讨论 this,在此过程中分别讲解其他相关知识点. 注意: 本文属于基础篇,请大神绕路.如 ...
- mysql select 指定列_MySQL使用select语句查询指定表中指定列(字段)的数据
本文介绍mysql数据库中执行select查询语句,查询指定列的数据,即指定字段的数据. 再来回顾一下sql语句中的select语句的语法: select 语句的基本语法: select from w ...
- 13.4 mysql用户管理 13.5 常用sql语句 13.6 mysql数据库备份恢复
mysql用户管理 1.创建一个普通用户并授权 [root@gary-tao ~]# mysql -uroot -p'szyino-123' Warning: Using a password on ...
- python邮件发送哪个好_最全总结!聊聊 Python 发送邮件的几种方式
1. 前言 邮件,作为最正式规范的沟通方式,在日常办公过程中经常被用到 我们都知道 Python内置了对 SMTP 的支持,可以发送纯文本.富文本.HTML 等格式的邮件 本文将聊聊利用 Python ...
- python repair修复功能_详解Python修复遥感影像条带的两种方式
GDAL修复Landsat ETM+影像条带 Landsat7 ETM+卫星影像由于卫星传感器故障,导致此后获取的影像出现了条带.如下图所示, 影像中均匀的布满条带. 使用GDAL修复影像条带的代码如 ...
- java websocket注解_【websocket】spring boot 集成 websocket 的四种方式
集成 websocket 的四种方案 1. 原生注解 pom.xml org.springframework.boot spring-boot-starter-websocket WebSocketC ...
- drf-路由组件:自动生成Routers路由、 使用方法、视图集中附加action的声明、自动生成路由router的两种方式的URL区别
目录 一. 自动生成Routers路由 二. 使用方法 1) 创建router对象,并注册视图集,例如 2)添加路由数据 三. 代码演示 四. 视图集中附加action的声明 五. 自动生成路由rou ...
- aes key长度_原创 | 浅谈Shiro反序列化获取Key的几种方式
点击"关注"了解更多信息 关于Apache Shiro反序列化 在shiro≤1.2.4版本,默认使⽤了CookieRememberMeManager,由于AES使用的key泄露, ...
最新文章
- 博客摘录:网络管理员的两天
- code第一部分数组:第二十二题 偶数次中查找单独出现一次的数
- JZOJ 5699. 【gdoi2018 day1】涛涛接苹果(appletree)
- matlab寻找函数对应的工具箱
- 反馈页面设计_获得设计反馈的艺术
- 一次回母校教前端的经历
- JUnit 5 –动态测试
- -6dB的效果也不错
- 看我如何发现(并修复)Python 源代码中的漏洞
- iOS 中 UIView 和 CALayer 的关系
- android如何去掉自动更新,如何停止Android手机上的应用程序自动更新
- PHP将图片转换成base64编码,hash函数
- 设计模式详解——模版方法模式
- springboot开源热门项目-bootdo修改支持多数据源
- 化繁为简|华天软件参数化,将轴承设计变为数与数的组合
- 社会工程学:关于一些信息收集的网站
- 疯狂填词 mad_libs 第9章9.9.2
- Flask学习笔记之g对象
- usb disconnect
- 算术运算验证码 黑体字体 乱码
热门文章
- TCP 实战抓包分析
- DevCon 命令与批处理自动禁用启用网卡
- 基于NSGA3的swat模型情景的多目标优化算法,python
- 穿越回二年级讲CPU工作原理。
- 【伸手党福利】开发人员重装系统顺序
- group + max函数_了解C ++中max()函数的工作方式
- java 去停用词_利用jieba分词并去除停用词
- GMSSL双证书认证C/S(Linux版)
- chrome浏览器设置思源黑体
- 机器学习(Machine Learning)深度学习(Deep Learning)较全面的资料