视图

视图:

            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;


#基于视图创建视图
CREATE VIEW vu_emp4
AS
SELECT employee_id,last_name
FROM vu_empl;

SELECT * FROM vu_emp4;


 

              更新视图的数据:

 

 

 

posted @ 2022-08-17 16:07  zjw_rp  阅读(65)  评论(0编辑  收藏  举报