• MySQL:MySQL 视图


    1 什么是视图

      1. 视图是一种虚拟表

      2. 视图建立在已有表的基础上, 视图赖以建立的这些表称为基表

      3. 向视图提供数据内容的语句为 SELECT 语句, 可以将视图理解为存储起来的 SELECT 语句

      4. 视图向用户提供基表数据的另一种表现形式

     

    2 视图的作用

    <1> 权限控制时可以使用

        比如,某几个列可以运行用户查询,其他列不允许,可以开通视图 查询特定的列, 起到权限控制的 作用

    <2> 简化复杂的多表查询

    •     视图 本身就是一条查询SQL,我们可以将一次复杂的查询 构建成一张视图, 用户只要查询视图 就可以获取想要得到的信息(不需要再编写复杂的SQL)
    •               视图主要就是为了简化多表的查询    

    <3>

      如果某个查询的结果出现地十分频繁, 并且查询语法比较复杂,

      那么这个时候, 就可以根据这条查询语句构建一张视图,方便查询

            操作视图,就相当于操作一张只读表

    3 视图的使用

    创建视图

    1) 语法格式

    create view 视图名 [column_list] as select语句;
    view: 表示视图
    column_list: 可选参数,表示属性清单,指定视图中各个属性的名称,默认情况下,与SELECT语句中查询
    的属性相同
    as : 表示视图要执行的操作
    select语句: 向视图提供数据内容

    2)创建一张视图

    #1. 先编写查询语句
    #查询所有商品 和 商品的对应分类信息
    SELECT * FROM products p LEFT JOIN category c ON p.`category_id` = c.`cid`;
    
    #2.基于上面的查询语句,创建一张视图
    CREATE VIEW products_category_view
    AS SELECT * FROM products p LEFT JOIN category c ON p.`category_id` = c.`cid`;

    3) 查询视图 ,当做一张只读的表操作就可以

    SELECT * FROM products_category_view;

    4 通过视图进行查询

      1) 需求: 查询各个分类下的商品平均价格

    #通过 多表查询
    SELECT
    cname AS '分类名称',
    AVG(p.`price`) AS '平均价格'
    FROM products p LEFT JOIN category c ON p.`category_id` = c.`cid`
    GROUP BY c.`cname`;
    # 通过视图查询 可以省略连表的操作
    SELECT cname AS '分类名称', AVG(price) AS '平均价格' FROM products_category_view GROUP BY cname;

      2) 需求: 查询鞋服分类下最贵的商品的全部信息

      

    #通过连表查询
    #1.先求出鞋服分类下的最高商品价格
    SELECT
        MAX(price) AS maxPrice
    FROM
    products p LEFT JOIN category c ON p.`category_id` = c.`cid`
    WHERE c.`cname` = '鞋服'
    
    #2.将上面的查询 作为条件使用
    SELECT * FROM products p LEFT JOIN category c ON p.`category_id` = c.`cid`
    WHERE c.`cname` = '鞋服' AND p.`price` =
    (SELECT
    MAX(price) AS maxPrice
    FROM
    products p LEFT JOIN category c ON p.`category_id` = c.`cid`
    WHERE c.`cname` = '鞋服');
    #通过视图查询
    SELECT * FROM products_category_view pcv
    WHERE pcv.`cname` = '鞋服'
    AND pcv.`price` = (SELECT MAX(price) FROM products_category_view WHERE cname =
    '鞋服')

    5 视图与表的区别

    • 视图是建立在表的基础上,表存储数据库中的数据,而视图只是做一个数据的展示
    • 通过视图不能改变表中数据(一般情况下视图中的数据都是表中的列 经过计算得到的结果,不允许更新)
    • 删除视图,表不受影响,而删除表,视图不再起作用
  • 相关阅读:
    Delphi 学习笔记
    Extjs 4
    面向对象(OOP)
    Java基础
    Ubantu(乌班图)
    CentOS 6.3操作常识
    英语音标单元音篇
    英语音标双元音篇
    英语音标辅音篇
    Oracle补习班第一天
  • 原文地址:https://www.cnblogs.com/JasperZhao/p/15023431.html
Copyright © 2020-2023  润新知