zoukankan      html  css  js  c++  java
  • mysql视图详细笔记

      1 #视图
      2 /*
      3 含义:虚拟表,和普通表一样使用
      4 mysql5.1版本出现的新特性,是通过表动态生成的数据
      5 
      6 比如:舞蹈班和普通班级的对比
      7     创建语法的关键字    是否实际占用物理空间    使用
      8 
      9 视图    create view        只是保存了sql逻辑    增删改查,只是一般不能增删改
     10 
     11 表    create table        保存了数据        增删改查
     12 
     13 
     14 */
     15 
     16 #案例:查询姓张的学生名和专业名
     17 SELECT stuname,majorname
     18 FROM stuinfo s
     19 INNER JOIN major m ON s.`majorid`= m.`id`
     20 WHERE s.`stuname` LIKE '张%';
     21 
     22 CREATE VIEW v1
     23 AS
     24 SELECT stuname,majorname
     25 FROM stuinfo s
     26 INNER JOIN major m ON s.`majorid`= m.`id`;
     27 
     28 SELECT * FROM v1 WHERE stuname LIKE '张%';
     29 
     30 
     31 #一、创建视图
     32 /*
     33 语法:
     34 create view 视图名
     35 as
     36 查询语句;
     37 
     38 */
     39 USE myemployees;
     40 
     41 #1.查询姓名中包含a字符的员工名、部门名和工种信息
     42 #①创建
     43 CREATE VIEW myv1
     44 AS
     45 
     46 SELECT last_name,department_name,job_title
     47 FROM employees e
     48 JOIN departments d ON e.department_id  = d.department_id
     49 JOIN jobs j ON j.job_id  = e.job_id;
     50 
     51 
     52 #②使用
     53 SELECT * FROM myv1 WHERE last_name LIKE '%a%';
     54 
     55 
     56 
     57 
     58 
     59 
     60 #2.查询各部门的平均工资级别
     61 
     62 #①创建视图查看每个部门的平均工资
     63 CREATE VIEW myv2
     64 AS
     65 SELECT AVG(salary) ag,department_id
     66 FROM employees
     67 GROUP BY department_id;
     68 
     69 #②使用
     70 SELECT myv2.`ag`,g.grade_level
     71 FROM myv2
     72 JOIN job_grades g
     73 ON myv2.`ag` BETWEEN g.`lowest_sal` AND g.`highest_sal`;
     74 
     75 
     76 
     77 #3.查询平均工资最低的部门信息
     78 
     79 SELECT * FROM myv2 ORDER BY ag LIMIT 1;
     80 
     81 #4.查询平均工资最低的部门名和工资
     82 
     83 CREATE VIEW myv3
     84 AS
     85 SELECT * FROM myv2 ORDER BY ag LIMIT 1;
     86 
     87 
     88 SELECT d.*,m.ag
     89 FROM myv3 m
     90 JOIN departments d
     91 ON m.`department_id`=d.`department_id`;
     92 
     93 
     94 
     95 
     96 #二、视图的修改
     97 
     98 #方式一:
     99 /*
    100 create or replace view  视图名
    101 as
    102 查询语句;
    103 
    104 */
    105 SELECT * FROM myv3 
    106 
    107 CREATE OR REPLACE VIEW myv3
    108 AS
    109 SELECT AVG(salary),job_id
    110 FROM employees
    111 GROUP BY job_id;
    112 
    113 #方式二:
    114 /*
    115 语法:
    116 alter view 视图名
    117 as 
    118 查询语句;
    119 
    120 */
    121 ALTER VIEW myv3
    122 AS
    123 SELECT * FROM employees;
    124 
    125 #三、删除视图
    126 
    127 /*
    128 
    129 语法:drop view 视图名,视图名,...;
    130 */
    131 
    132 DROP VIEW emp_v1,emp_v2,myv3;
    133 
    134 
    135 #四、查看视图
    136 
    137 DESC myv3;
    138 
    139 SHOW CREATE VIEW myv3;
    140 
    141 
    142 #五、视图的更新
    143 
    144 CREATE OR REPLACE VIEW myv1
    145 AS
    146 SELECT last_name,email,salary*12*(1+IFNULL(commission_pct,0)) "annual salary"
    147 FROM employees;
    148 
    149 CREATE OR REPLACE VIEW myv1
    150 AS
    151 SELECT last_name,email
    152 FROM employees;
    153 
    154 
    155 SELECT * FROM myv1;
    156 SELECT * FROM employees;
    157 #1.插入
    158 
    159 INSERT INTO myv1 VALUES('张飞','zf@qq.com');
    160 
    161 #2.修改
    162 UPDATE myv1 SET last_name = '张无忌' WHERE last_name='张飞';
    163 
    164 #3.删除
    165 DELETE FROM myv1 WHERE last_name = '张无忌';
    166 
    167 #具备以下特点的视图不允许更新
    168 
    169 
    170 #①包含以下关键字的sql语句:分组函数、distinctgroup  byhaving、union或者union all
    171 
    172 CREATE OR REPLACE VIEW myv1
    173 AS
    174 SELECT MAX(salary) m,department_id
    175 FROM employees
    176 GROUP BY department_id;
    177 
    178 SELECT * FROM myv1;
    179 
    180 #更新
    181 UPDATE myv1 SET m=9000 WHERE department_id=10;
    182 
    183 #②常量视图
    184 CREATE OR REPLACE VIEW myv2
    185 AS
    186 
    187 SELECT 'john' NAME;
    188 
    189 SELECT * FROM myv2;
    190 
    191 #更新
    192 UPDATE myv2 SET NAME='lucy';
    193 
    194 
    195 
    196 
    197 
    198 #③Select中包含子查询
    199 
    200 CREATE OR REPLACE VIEW myv3
    201 AS
    202 
    203 SELECT department_id,(SELECT MAX(salary) FROM employees) 最高工资
    204 FROM departments;
    205 
    206 #更新
    207 SELECT * FROM myv3;
    208 UPDATE myv3 SET 最高工资=100000;
    209 
    210 
    211 #④join
    212 CREATE OR REPLACE VIEW myv4
    213 AS
    214 
    215 SELECT last_name,department_name
    216 FROM employees e
    217 JOIN departments d
    218 ON e.department_id  = d.department_id;
    219 
    220 #更新
    221 
    222 SELECT * FROM myv4;
    223 UPDATE myv4 SET last_name  = '张飞' WHERE last_name='Whalen';
    224 INSERT INTO myv4 VALUES('陈真','xxxx');
    225 
    226 
    227 
    228 #⑤from一个不能更新的视图
    229 CREATE OR REPLACE VIEW myv5
    230 AS
    231 
    232 SELECT * FROM myv3;
    233 
    234 #更新
    235 
    236 SELECT * FROM myv5;
    237 
    238 UPDATE myv5 SET 最高工资=10000 WHERE department_id=60;
    239 
    240 
    241 
    242 #⑥where子句的子查询引用了from子句中的表
    243 
    244 CREATE OR REPLACE VIEW myv6
    245 AS
    246 
    247 SELECT last_name,email,salary
    248 FROM employees
    249 WHERE employee_id IN(
    250     SELECT  manager_id
    251     FROM employees
    252     WHERE manager_id IS NOT NULL
    253 );
    254 
    255 #更新
    256 SELECT * FROM myv6;
    257 UPDATE myv6 SET salary=10000 WHERE last_name = 'k_ing';
  • 相关阅读:
    vijos p1782——借教室(noip2012提高组第2题)
    vijos p1781——同余方程(noip2012提高组第1题)
    vijos p1905——生活大爆炸版 石头剪刀布(noip2014提高组第一题)
    URAL_1018 二叉苹果树
    b_lc_统计同构子字符串的数目(找规律 / dp)
    a_lc_完成所有工作的最短时间(暴搜 / 状压)
    lc_b_栈和队列设计(都需要不断踢出非法元素的过程)
    a_lc_缺失的第一个整数 I~II(暴力 / 不断放到正确位置)
    b_lc_最短无序连续子数组(暴力 / )
    b_lc_把二叉搜索树转换为累加树(逆中序遍历 / 迭代)
  • 原文地址:https://www.cnblogs.com/deyo/p/13371127.html
Copyright © 2011-2022 走看看