• MySQL视图


    视图

    视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一些列带有名称的列和行数据。视图的变化会影响到基表,同理基表的变化也会影响到视图;

    基本使用

    创建视图:
    create view viewName as (select 语句);

    eg:
    测试数据:在这里插入图片描述

    1. 显示员工及其对应的部门名;

    分析:
    员工名来自emp表、部门名来自于dept表,因此我们可以对这两个表做内连接查询:
    SQL语句:select ename,dname from emp inner join dept on emp.deptno<=> dept.deptno;
    在这里插入图片描述
    2. 查询员工SMITH 的部门名:
    select ename,dname from emp inner join dept on emp.deptno<=> dept.deptno where ename='SMITH';
    在这里插入图片描述
    那如果我要筛选KING、FORD、MILLER等的部门号呢?我们是不是每次都要重新写上面的SQL语句,这样效率是不是太慢了?因为每次查询都要做笛卡尔积,太慢了,同时SQL语句也比较长,难的写;
    为此,我们可以将上面的员工名与部门名组成的表当作视图,让其临时存在与内存中,这样我们接下来如果还要查询某个人对应的部门名的话,我们就对这个视图进行操作就行了,减少了每次做笛卡尔积的消耗,同时操作这个视图与操作普通表无异;

    打视图:
    create view myview as (select ename,dname from emp inner join dept on emp.deptno<=> dept.deptno);
    在这里插入图片描述
    其中:像emp、dept这样提供原始数据的表叫做基表,myview叫做视图;

    修改了视图,对基表数据有影响;

    1. 将视图中SMITH的名字进行小写:
      在这里插入图片描述
    2. 修改基表中的数据,对视图有影响:
      在这里插入图片描述

    删除视图:
    drop view viewname;
    eg:
    drop view myview;
    在这里插入图片描述

    视图的限制和规则

    1. 视图与表结构一样,必须命名,不能与其它表同名;
    2. 创建视图没有数目限制,但是要考虑复杂查询创建视图之后的性能影响;
    3. 视图不能添加索引,也不能有关联的触发器或者默认值;
    4. 视图可以提高安全性,必须具有足够的访问权限;
    5. order by 可以用在视图中,但是如果从该视图检索数据 select 中也含有 order by ,那么该视图
      中的 order by 将被覆盖;
      eg:
      在这里插入图片描述
      在上面的例子中,查询结果将按照column2的值进行排序,而不是按照在视图中定义的column1排序。
    6. 视图可以和表一起使用
  • 相关阅读:
    Apache SeaTunnel本地源码构建编译运行调试
    网络原理 - HTTP/HTTPS(4)
    【Labview】通过串口通信从上位机读取和写入数据
    flink中使用异步函数的几个注意事项
    免费SSL证书知多少?免费SSL证书和收费SSL证书的区别
    多益网络面经
    Kubernetes部署
    华为FPGA工程师面试题
    智能体脂秤模块方案设计与开发
    如何增长LLM推理token,从直觉到数学
  • 原文地址:https://blog.csdn.net/qq_62106937/article/details/132954308