zoukankan      html  css  js  c++  java
  • MySQL进阶16

    #进阶16 : 视图
    /*
    含义: 虚拟表,和普通表一样使用;(从5.1开始使用的:)是通过表动态生成的数据
    创建语法:
        create view 视图名
        as
        查询语句;
    ----------
    作用: 重用SQL语句,简化复杂的sql操作,不必知道它的查询细节;
        保护数据,提高安全性;
    -------------------------
    视图的修改:
       方式1: create or replace view 视图名
           as 
           查询语句;
       方法2: alter view 视图名
          as
          查询语句;    
    ----------------------------
    三:视图的删除 : 用户可以一次删除一个或者多个视图,前提是必须有该视图的drop权限。
    语法: drop view 视图名,视图名,视图名;
    -----------------------------
    四:查看视图
    desc v2;
    -----------------------------
    #五: 视图的更新
        CREATE OR REPLACE VIEW myv1
        AS
        SELECT last_name,email FROM employees;
    
        SELECT * FROM myv1 ORDER BY last_name DESC;
        #1.插入
        INSERT INTO myv1 VALUES('张飞','zafqq.com');
    
        #2 修改
        UPDATE myv1 SET last_name ='张无忌' WHERE last_name='张飞';
    
        #3 删除
        DELETE FROM myv1 WHERE last_name ='张无忌';
    --------------------------------------------
    #六 视图的可更新性
      视图的可更新性和视图中查询的定义有关系,以下类型的视图是不能更新的。 
        • 包含以下关键字的sql语句:分组函数、distinct、group  by 、having、union或者union all 
        • 常量视图 • Select中包含子查询 
        • join 
        • from一个不能更新的视图 
        • where子句的子查询引用了from子句中的表 
    ---------------------------------------------
    视图 : create view   没有占用多少物理空间,只保存sql逻辑
    表   : create table  占用了
    
    */
          #案例():查询姓张的学生名和专业名
    USE student;
    SELECT studentname,majorname
    FROM stuinfo s
    INNER JOIN major m ON s.`majorid`=m.`majorid`
    WHERE s.`studentname` LIKE '张%';
        #demo1:  创建视图 ;
    CREATE VIEW v1
    AS
    SELECT studentname,majorname
    FROM stuinfo s
    INNER JOIN major m ON s.`majorid`=m.`majorid`
    WHERE s.`studentname` LIKE '张%';
            #然后从视图中查找出全部信息;
    SELECT * FROM v1
    WHERE studentname LIKE '张%';
    #----------------------------
        #1.查询邮箱中包含a字符的 员工名、部门名和工种信息 
    
    CREATE VIEW v2
    AS 
    SELECT e.`last_name`,e.`department_id`,j.`job_id`,j.job_title
    FROM employees e,jobs j
    WHERE e.`job_id`=j.`job_id` AND email LIKE '%a%';
        #② 使用视图
    SELECT * FROM v2 WHERE last_name LIKE '%a%';
    
        #2.查询各部门的平均工资的级别
    CREATE VIEW v3
    AS  
    SELECT AVG(salary) ag,department_id
    FROM employees
    GROUP BY department_id;
    
    SELECT v3.department_id,g.`grade_level`
    FROM v3
    JOIN job_grades g
    ON v3.ag BETWEEN g.`lowest_sal` AND g.`highest_sal`;
    
        #3.查询平均工资最低的部门信息
    SELECT * FROM v3 ORDER BY ag LIMIT 1;
    
        #4.查询平均工资最低的部门名和工资
    
    SELECT *
    FROM `departments`
    WHERE departments.department_id = (
      SELECT department_id FROM v3 
      ORDER BY ag LIMIT 1
    );
        #5.视图的修改(REPLACE)--方式1
    CREATE OR REPLACE VIEW v3
    AS  
    SELECT MIN(salary) min_ag,department_id
    FROM employees
    GROUP BY department_id;
    
    SELECT * FROM v3;
        #6.视图的修改(alter)--方式2
    ALTER VIEW v3
    AS  
    SELECT MAX(salary) max_ag,department_id
    FROM employees
    GROUP BY department_id;
    
        #平均1.00 -- 2400次
    SELECT ('28-29两天scanner sum'),(
    865-833+621-523+230-175+3+ 58-41+87-66+4+48-32+7+2+20+31-14+11-9
    ),(0.054+0.073);
    
    #五: 视图的更新
    CREATE OR REPLACE VIEW myv1
    AS
    SELECT last_name,email
    FROM employees;
    
    SELECT * FROM myv1 ORDER BY last_name DESC;
    #1.插入
    INSERT INTO myv1 VALUES('张飞','zafqq.com');
    
    #2 修改
    UPDATE myv1 SET last_name ='张无忌' WHERE last_name='张飞';
    
    #3 删除
    DELETE FROM myv1 WHERE last_name ='张无忌';
  • 相关阅读:
    灵魂有香气的女子IOS版本APP,近期将考虑开放源代码
    PHP中$_SERVER获取当前页面的完整URL地址
    zabbix监控报错zabbix server is not running解决方法
    Linux重启inotify配置max_user_watches无效被恢复默认值8192的正确修改方法
    centos在yum install报错:Another app is currently holding the yum lock解决方法
    nginx去掉单个目录和多个目录PHP执行权限方法
    express搭建权限管理系统
    在express项目中使用formidable & multiparty实现文件上传
    vue生成图片验证码
    第0步:OracleRAC软件准备
  • 原文地址:https://www.cnblogs.com/zhazhaacmer/p/9884301.html
Copyright © 2011-2022 走看看