视图
1. 视图是一种 虚拟表 , 本身是不具有数据 的。
2. 视图建立在已有表的基础上, 视图赖以建立的这些表称为基表。
3. 视图的创建和删除只影响视图本身,不影响对应的基表。但是当对视图中的数据进行增加、
删除和修改操作时,数据表中的数据会相应地发生变化,反之亦然。
4. 向视图提供数据内容的语句为 SELECT 语句, 可以将视图理解为存储起来的 SELECT语句。
关键字:VIEW
#视图(View)
/*
①视图,可以看做是一个虚拟表,本身是不存在储存数据的
视图的本质,就可以看做是存储起来的SELECT语句
②视图中select语句中涉及到的表,称为基表
③ 针对视图做DML操作,会影响到对应的基表的数据。反之亦然。
④ 视图本身的删除,不会导致基表中数据的删除。
⑤ 视图的应用场景:针对于小型项目,不推荐使用视图。
⑥ 视图的优点:简化查询 控制数据的访问
*/
#如何创建视图
#准备工作
CREATE DATABASE dbtest4;
USE dbtest4;
CREATE TABLE emps
AS
SELECT *
FROM atguigudb.employees;
#针对于单表
CREATE TABLE depts
AS
SELECT *
FROM atguigudb.departments;
SELECT *FROM emps;
#针对于单表
#情况1:视图中的字段与基表的字段有对应关系
CREATE VIEW vu_empl
AS
SELECT employee_id,last_name,salary
FROM emps;
SELECT * FROM vu_emp2;
CREATE VIEW vu_emp2
AS
SELECT employee_id emp_id,last_name lname,salary #查询语句中字段的别名会作为视图中字段的名称出现
FROM emps
WHERE salary >8000;
CREATE VIEW vu_emp3(emp_id,lname,monthly_salary)#小括号内字段个数与select 中 字段个数相同
AS
SELECT employee_id ,last_name ,salary #查询语句中字段的别名会作为视图中字段的名称出现
FROM emps
WHERE salary >8000;
#情况2:视图中的字段在基表中可能没有对应的字段
CREATE VIEW vu_emp_sal
AS
SELECT department_id ,AVG(salary) avg_sal
FROM emps
WHERE department_id IS NOT NULL
GROUP BY department_id ;
SELECT * FROM vu_emp_sal;
#针对多表
CREATE VIEW vu_emp_dept
AS
SELECT e.employee_id ,e.department_id,d.department_name
FROM emps e JOIN depts d
ON e.department_id =d.department_id;
SELECT * FROM vu_emp_dept;
#利用视图对数据进行格式化
CREATE VIEW vu_emp_deptl
AS
SELECT CONCAT(e.last_name,'(',d.department_name,')') emp_idfo
FROM emps e JOIN depts d
ON e.`department_id` =d.`department_id`;
SELECT * FROM vu_emp_deptl;
#基于视图创建视图