视图指来源于一个或多个表(或视图),将表中数据筛选映射后展现出来的一种结构,并且随原表(或原视图)中数据改变而改变。
使用视图:
1)提高数据访问的安全性:可以只展示表中所需数据,将其他数据进行隐藏。
2)方便复杂的查询操作:视图可以基于多表连接,整合数据方便。
SQL创建视图语句
CREATE VIEW view_name [ column1_name [,column2_name ] … ]
AS subquery(子查询语句)
示例
emp表包含e_id, e_name, d_id, sex, age, dept, job, salary等属性
dept表包含d_id, d_name等属性
1 基于单表
CREATE VIEW view_emp
AS
SELECT e_id,e_name,sex,age,dept
FROM emp;
2 基于多表
CREATE VIEW view2_emp
AS
SELECT e.e_id, e.d_id, e.e_name, d.d_id, d.d_name
FROM emp e, dept d
WHERE e.d_id=d.d_id;
3 基于函数、分组数据
CREATE VIEW view_emp_sal
AS
SELECT dept, job, MAX(salary) maxsalaryFROM emp
GROUP BY dept, job
HAVING MAX(salary) > 4000
4 基于视图
要查询学生成绩中最高分在90分以上的学生信息
(1) 使用普通SQL语句
SELECT s.stu_id, s.cur_id, s.cur_name, MAX(s.result)
FROM (
SELECT re.stu_id, cu.cur_id, cu.cur_name, re.result
FROM result re, curriculum cu
WHERE re.cur_id = cu.cur_id
) s
GROUP BY s.stu_id
HAVING MAX(s.result) >= 90
(2) 使用视图
CREATE VIEW view2_result
AS
SELECT stu_id, cur_id, cur_name, MAX(result)
FROM view_result
GROUP BY stu_id
HAVING MAX(result) >= 90
上述SQL语句中,view_result表示成绩信息的视图
在视图中添加CHECK约束
在视图中执行插入、修改和删除等更新语句时,会对数据做条件检查
语法:
CREATE VIEW view_name [ column1_name [,column2_name ] … ]
AS subquery
WITH CHECK OPTION
示例
CREATE VIEW view_emp_dept
AS
SELECT e_id, e_name, sex, age, job
FROM emp
WHERE job=”teacher” //条件检查
WITH CHECK OPTION //添加CHECK约束条件