- 在 CREATE VIEW 语句中嵌入子查询
CREATE [OR REPLACE][ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]VIEW 视图名称 [(字段列表)]AS 查询语句[WITH [CASCADED|LOCAL] CHECK OPTION]
- 精简版
CREATE VIEW 视图名称AS 查询语句
3.1 创建单表视图
举例:
CREATE VIEW empvu80ASSELECT employee_id, last_name, salaryFROM employeesWHERE department_id = 80;
查询视图:
SELECT *FROM salvu80;
举例:
CREATE VIEW emp_year_salary (ename,year_salary)ASSELECT ename,salary*12*(1+IFNULL(commission_pct,0))FROM t_employee;
举例:
CREATE VIEW salvu50ASSELECT employee_id ID_NUMBER, last_name NAME,salary*12 ANN_SALARYFROM employeesWHERE department_id = 50;
说明1:实际上就是我们在 SQL 查询语句的基础上封装了视图 VIEW,这样就会基于 SQL 语句的结果集形成一张虚拟表。
说明2:在创建视图时,没有在视图名后面指定字段列表,则视图中字段列表默认和SELECT语句中的字段列表一致。如果SELECT语句中给字段取了别名,那么视图中的字段名和别名相同。
3.2 创建多表联合视图
举例:
CREATE VIEW empviewASSELECT employee_id emp_id,last_name NAME,department_nameFROM employees e,departments dWHERE e.department_id = d.department_id;
CREATE VIEW emp_deptASSELECT ename,dnameFROM t_employee LEFT JOIN t_departmentON t_employee.did = t_department.did;
CREATE VIEW dept_sum_vu(name, minsal, maxsal, avgsal)ASSELECT d.department_name, MIN(e.salary), MAX(e.salary),AVG(e.salary)FROM employees e, departments dWHERE e.department_id = d.department_idGROUP BY d.department_name;
- 利用视图对数据进行格式化
我们经常需要输出某个格式的内容,比如我们想输出员工姓名和对应的部门名,对应格式为 emp_name(department_name),就可以使用视图来完成数据格式化的操作:
CREATE VIEW emp_departASSELECT CONCAT(last_name,'(',department_name,')') AS emp_deptFROM employees e JOIN departments dWHERE e.department_id = d.department_id
3.3 基于视图创建视图
当我们创建好一张视图之后,还可以在它的基础上继续创建视图。
举例:联合“emp_dept”视图和“emp_year_salary”视图查询员工姓名、部门名称、年薪信息创建 “emp_dept_ysalary”视图。
CREATE VIEW emp_dept_ysalaryASSELECT emp_dept.ename,dname,year_salaryFROM emp_dept INNER JOIN emp_year_salaryON emp_dept.ename = emp_year_salary.ename;
