day10 -- 视图

news/2024/11/30 1:54:19/

brief

在 MySQL 中,视图(View)是一种虚拟的表格,它是由一个 SQL 查询语句所定义的。视图通常基于一个或多个实际存在的表格,并且可以与这些表格进行交互操作,就像真实的表格一样。

MySQL 视图是一个存储在数据库中的命名查询结果集。当您创建视图时,它会将查询结果作为表格存储在数据库中,并赋予该结果集一个名称。在后续的查询中,您可以使用该名称来引用视图,从而简化了复杂查询的编写过程。

视图可以像任何其他表格一样被查询和操作。它们支持 SELECT、INSERT、UPDATE 和 DELETE 等操作,但是并不是实际的物理表格,而是通过对底层数据表格执行 SELECT 查询语句来创建的虚拟表格。


视图具有以下优点:

  • 简化复杂的查询:您可以使用视图来保存常用的、复杂的查询,以便在需要时直接使用视图来查询数据,无需每次都重新编写查询。

  • 提高数据的安全性:通过视图,您可以限制某些用户只能访问特定的列或行,从而提高数据的安全性。

  • 提高数据的组织性:使用视图可以使数据更易于组织和管理,因为您可以将相关的数据组合在一起,并且可以根据需要自定义视图的列和排序方式。

  • 提高性能:使用视图可以减少重复数据的存储,从而提高查询的性能。此外,当您在视图上执行 SELECT 查询时,MySQL 可以优化查询计划,从而提高查询性能。

但是,视图也有一些限制。例如,它们不能包含临时表格或用户变量,也不能使用 IN 和 OUT 参数。此外,如果视图的查询语句非常复杂,则可能会影响查询的性能。

代码演示

select cust_name,cust_contact 
from customers,orders,orderitems
where customers.cust_id = orders.cust.id
and orderitems.order_num = orders.order_num
and prod_id = 'TNT2';

现在,假如可以把整个查询包装成一个名为productviews的虚拟表,则可以如下轻松地检索出相同的数据:
productviews是一个视图,作为视图,它不包含表中应该有的任何列或数据,它包含的是一个SQL查询.

select cust_name,cust_contact 
from productsviews
where prod_id = 'TNT2';


视图的创建

  • 视图用CREATE VIEW语句来创建

  • 使用SHOW CREATE VIEW viewname;来查看创建视图的语句

  • 用DROP删除视图,其语法为DROP VIEW viewname

  • 更新视图时,可以先用DROP再用CREATE,也可以直接用CREATE OR REPLACE VIEW。如果要更新的视图不存在,则第2条更新语句会创建一个视图;如果要更新的视图存在,则第2条更新语句会替换原有视图

  • 利用视图简化复杂的联结
    视图的最常见的应用之一是隐藏复杂的SQL,这通常都会涉及联结。请看下面的例子:

CREATE VIEW productsviews AS 
SELECT cust_name,cust_contact,prod_id 
FROM customers,orders,orderitems
where customers.cust_id = orders.cust.id
and orderitems.order_num = orders.order_num;
# 这条语句创建一个名为productviews的视图, 它联结三个表,以返回已订购了任意产品的所有客户的列表# 下面既可以使用视图了
SELECT cust_name,cust_contact
from productview 
where prod_id = 'TNT2';

感觉就像是 封装好的 可重复使用的函数一样!

  • 用视图重新格式化检索出来的数据
select Concat(RTrim(vend_name),'(',RTrim(vend_country),')')
AS vend_title
from vendors order by vend_name;# 把他封装成view
Create view vendoorlocation AS
select Concat(RTrim(vend_name),'(',RTrim(vend_country),')')
AS vend_title
from vendors order by vend_name;
  • 用视图过滤不想要的数据
CREATE VIEW  customeremail AS
SELECT cust_id,cust_name,cust_email
FROM  customers
WHERE cust_email IS NOT NULL;SELECT * FROM customeremail;
  • 使用视图与计算字段
# 使用计算字段
select prod_id,quantity,item_price, quantity*item_price AS expanded_price 
from orderitems
where order_num = 2005;# 将其转化为计算字段
CREATE VIEW orderitemsexpanded AS
select prod_id,quantity,item_price, quantity*item_price AS expanded_price 
from orderitems# 使用视图
select * from orderitemsexpanded where orde_num = 2005;

http://www.ppmy.cn/news/183473.html

相关文章

uniapp如何实现最新发布apk版本检查和更新

前言: 我们要实现的用户进入apk首页之后,将安卓本机的apk版本和最新的apk版本对比,如果有更高级别的版本(版本号迭代的时候要逐渐增加,比如:本地100版本号(v1.0.0),最新的是102版本号(v1.0.2),那么就提示更新)要提示用户更新,去点击更新按钮下载最新的apk并且安装体…

深度学习-RepVGGNet

文章目录 前言一、RepVgg简介二、为什么训练时采用多分支结构三、为什么推理时使用单分支结构四、结构重参数化1、融合Conv2d和BN 前言 看yolonas代码,发现有QARepVgg网络,完全不懂,所以来补课,先看了RepVGG 这篇文章主要来自于霹…

五年制专转本能给你带来的仅仅是一纸本科文凭吗?

五年制专转本能给你带来的仅仅是一纸本科文凭吗? 经历过五年制专转本的人才会懂,专转本获得的不仅仅只是本科学历,还带给了自己更多宝贵的东西,对以后的发展起着不可磨灭的作用。 一、提升了平台,营造更好的环境 当…

2008年IT日历

2月8日 威斯康辛校友研究基金会向美国威斯康星州西区地方法院递交诉状反对英特 尔侵犯了他们的微处理器技术专利。在诉状中威斯康辛校友研究基金会要求英特尔提供补偿。 2月8日 针对InfoWorld网站发起的“挽救XP”行动,微软日前做出了回应,称将根据 用户…

MTK 人像双摄虚化导通流程

和你一起终身学习,这里是程序员Android 经典好文推荐,通过阅读本文,您将收获以下知识点: 一、 创建 LogicalCameraName 相关的metadata二、 导通 LogicalCameraName Middleware 相关配置三、认 LogicalCameraName 是否创建成功四、双摄bringu…

windows 7

系统简介 系统名称:Windows 7 核心版本号:Windows NT 6.1 开发代号:Blackcomb及Windows Vienna 测试历史: 2007年12月20日:Windows 7 Milestone1(build 6519.1) 2008年12月12日:Wind…

软件魔方制作系统启动盘并安装win10系统

不多说,直接上干货! 推荐软件:软件魔方 http://mofang.ruanmei.com/ 这里,我想说的是,这个软件来制作系统盘,是真的方便和好处多多。具体我不多说,本人也是用过其他的如大白菜等等。 最后&#…

( 持续更新,目前含 200+ 工具类 ) DevUtils 是一个 Android 工具库, 主要根据不同功能模块,封装快捷使用的工具类及 API 方法调用。

DevUtils GitHub About ( 持续更新,目前含 200 工具类 ) Roadmap DevUtils 是一个 Android 工具库,主要根据不同功能模块,封装快捷使用的工具类及 API 方法调用 该项目尽可能的便于开发人员,快捷、高效开发安全可靠的项目。 Docu…