虚拟表
,视图本身并不存储数据视图建立在已有表的基础上
,它所依赖的表称为基表
数据
的增删改操作
,会影响到基表中的数据虚拟表
,不占用存储数据的资源CREATE VIEW 视图名称
AS
SELECT查询语句;
1)单表查询如何创建视图
情况一:视图中的字段与基表的字段有对应关系,假设我们要从员工表中查询某些字段作为视图
# 查询语句中的字段别名,会作为视图中的字段进行展示
CREATE VIEW vu_emp
AS
SELECT employee_id emp_id,last_name lname,salary
FROM t_employee;
# 小括号内的字段个数与SELECT中字段个数相同,小括号内的别名作为视图展示字段
CREATE VIEW vu_emp2(emp_id,lname,salary)
AS
SELECT employee_id,last_name,salary
FROM t_employee
WHERE salary > 8000;
情况二:视图中的字段在基表中没有对应字段,比如要将某个字段的平均值作为视图的字段
CREATE VIEW vu_emp3
AS
SELECT dept_id,AVG(salary) avg_salary
FROM t_employee
WHERE department_id IS NOT NULL
GROUP BY dept_id;
2)多表查询如何创建视图
CREATE VIEW vu_emp_dept
AS
SELECT e.emp_id,e.dept_id,d.dept_name
FROM t_employee e JOIN t_dept d
ON e.dept_id = d.dept_id;
3)使用视图对数据进行格式化
假设我们要查询员工表中的员工名称,并且在后面追加他的部门id
得到员工名称(部门id)
这种形式的数据
CREATE VIEW vu_emp_dept_info
AS
SELECT CONCAT(last_name,'(',emp_id,')') emp_dep_info
FROM
t_dept;
4)基于视图创建视图
CREATE VIEW vu_dept_info
AS
SELECT dept_id,dept_name
FROM vu_emp_dept;
基于多个视图进行多表查询也是和上面表的多表查询也是一样的思路,都是使用JOIN
关键字
# 查看数据库中有多少表和视图
SHOW TABLES;
#查看视图的结构
DESC 视图名称;
#查看视图的详细信息
SHOW CREATE VIEW 视图名称;
更新或者删除
视图中的某部分数据,会同步影响基表
中展示的数据。同理,更新或者删除
基表中的部分数据,也会同步影响相关视图
中展示的数据在基表中不存在
,例如视图中某个字段是对基表中某个字段使用聚合函数得到的,我们无法对其进行更新或者删除
,就像下方的avg_salaryCREATE VIEW vu_emp3
AS
SELECT dept_id,AVG(salary) avg_salary
FROM t_employee
WHERE department_id IS NOT NULL
GROUP BY dept_id;
1)使用CREATE OR REPLACE
假设我们需要在下面的视图中再增加一个email字段
CREATE VIEW vu_emp
AS
SELECT employee_id,last_name,salary
FROM t_employee
WHERE salary > 8000;
就可以使执行如下sql
CREATE OR REPLACE VIEW vu_emp
AS
SELECT employee_id,last_name,salary,email
FROM t_employee
WHERE salary > 8000;
2)使用ALTER VIEW
,想达到上面那样的效果,就执行如下sql
ALTER VIEW vu_emp
AS
SELECT employee_id,last_name,salary,email
FROM t_employee
WHERE salary > 8000;
3)删除视图,IF EXISTS
可带可不带
DROP VIEW IF EXISTS 视图名称;
另外,如果视图C是基于视图A与视图B创建的,当A与B被删除时,视图C会出现查询失败的情况
如有错误,欢迎指正!!!
更多【mysql-【MySQL】视图】相关视频教程:www.yxfzedu.com