开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第41天,点击查看活动详情
1.创建视图
在CREATE VIEW语句中嵌入子查询
语法定义版:
CREATE [OR REPLACE]
[ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW 视图名称 [(字段列表)]
AS 查询语句
[WITH [CASCADED|LOCAL] CHECK OPTION]
考虑到语法定义版包含太多细节,很多时候创建视图的时候不需要使用到这么复杂的东西,所以有了以下的精简版:
CREATE VIEW 视图名称
AS 查询语句
创建单表视图
话不多说,直接上例子:
CREATE VIEW empvu80
AS
SELECT employee_id, last_name, salary FROM employees
WHERE department_id = 80;
查询视图:
SELECT *
FROM empvu80;
图解:
再来一个例子:
CREATE VIEW salvu50
AS
SELECT employee_id ID_NUMBER, last_name NAME,salary*12 ANN_SALARY
FROM employees
WHERE department_id = 50;
- 实际上就是我们在SQL查询语句的基础上封装了视图VIEW,这样就会基于SQL语句的结果集形成一张虚拟表
- 在创建视图时,没有在视图名后面指定字段列表,则视图中字段列表默认和SELECT语句中的字段列表一致。如果SELECT语句中给字段取了别名,那么视图中的字段名和别名相同
创建多表联合视图
三个例子让大家直观地了解多表联合视图的创建:
-- 举例1:
CREATE VIEW empview
AS
SELECT employee_id emp_id,last_name NAME,department_name
FROM employees e,departments d
WHERE e.department_id = d.department_id;
-- 举例2:
CREATE VIEW emp_dept
AS
SELECT ename,dname
FROM t_employee LEFT JOIN t_department
ON t_employee.did = t_department.did;
-- 举例3:
CREATE VIEW dept_sum_vu
(name, minsal, maxsal, avgsal)
AS
SELECT d.department_name, MIN(e.salary), MAX(e.salary),AVG(e.salary)
FROM employees e, departments d
WHERE e.department_id = d.department_id
GROUP BY d.department_name;
利用视图对数据进行格式化:
我们经常需要输出某个格式的内容,比如我们想输出员工姓名和对应的部门名,对应格式为emp_name(department_name),就可以使用视图来完成数据格式化的操作:
CREATE VIEW emp_depart
AS
SELECT CONCAT(last_name,'(',department_name,')') AS emp_dept
FROM employees e JOIN departments d
WHERE e.department_id = d.department_id;
基于视图创建视图
当我们创建好一张视图之后,还可以在它的基础上继续创建视图。
eg:联合“emp_dept”视图和“emp_year_salary”视图查询员工姓名、部门名称、年薪信息创建“emp_dept_ysalary”视图。
CREATE VIEW emp_dept_ysalary
AS
SELECT emp_dept.ename,dname,year_salary
FROM emp_dept INNER JOIN emp_year_salary
ON emp_dept.ename = emp_year_salary.ename;
2.查看视图
- 语法1:查看数据库的表对象、视图对象
SHOW TABLES;
- 语法2:查看视图的结构
DESC / DESCRIBE 视图名称;
- 语法3:查看视图的属性信息
注:查看视图信息(显示数据表的存储引擎、版本、数据行数和数据大小等
SHOW TABLE STATUS LIKE '视图名称'\G
执行结果显示,注释Comment为VIEW,说明该表为视图,其他的信息为NULL,说明这是一个虚表。
- 语法4:查看视图的详细定义信息
SHOW CREATE VIEW 视图名称;
3.修改、删除视图
修改视图
- 方式1:使用CREATE OR REPLACE VIEW子句修改视图
eg:
CREATE OR REPLACE VIEW empvu80
(id_number, name, sal, department_id)
AS
SELECT employee_id, first_name || ' ' || last_name, salary, department_id
FROM employees
WHERE department_id = 80;
说明:CREATE VIEW 子句中各列的别名应和子查询中各列相对应。
- 方式2:ALTER VIEW
修改视图的语法是:
ALTER VIEW 视图名称
AS
查询语句
删除视图
- 删除视图只是删除视图的定义,并不会删除基表的数据。
- 删除视图的语法如下:
DROP VIEW IF EXISTS 视图名称;
eg:
DROP VIEW empvu80
- 说明:基于视图a、b创建了新的视图c,如果将视图a或者视图b删除,会导致视图c的查询失败。这样的视图c需要手动删除或修改,否则影响使用