创建视图

第8章 视图

1. 什么是视图?它有什么作用?

视图(View)是一种虚拟表,其内容由查询定义。视图并不存储实际数据,而是基于一个或多个表的查询结果。视图的主要作用包括:

  • 简化复杂查询:将复杂的 SQL 查询封装在视图中,方便重复使用。
  • 数据安全性:通过视图限制用户访问敏感数据,只暴露必要的信息。
  • 逻辑独立性:视图可以屏蔽底层表结构的变化,应用程序只需访问视图即可。

2. 创建一个视图,此视图要包括以下信息:员工编号,员工姓名。

1
2
CREATE OR REPLACE VIEW v_emp_basic AS
SELECT empno, ename FROM emp;

3. 创建一个视图,此视图要包括以下信息:员工编号,员工姓名,部门编号,部门名称。

1
2
3
4
CREATE OR REPLACE VIEW v_emp_dept AS
SELECT e.empno, e.ename, e.deptno, d.dname
FROM emp e
JOIN dept d ON e.deptno = d.deptno;

4. 创建一个视图,此视图要包括以下信息:员工编号,员工姓名,经理编号,经理姓名。

1
2
3
4
CREATE OR REPLACE VIEW v_emp_manager AS
SELECT e.empno AS emp_no, e.ename AS emp_name, m.empno AS mgr_no, m.ename AS mgr_name
FROM emp e
JOIN emp m ON e.mgr = m.empno;

5. 创建一个视图,此视图要包括以下信息:部门编号,员工个数。

1
2
3
4
CREATE OR REPLACE VIEW v_dept_emp_count AS
SELECT deptno, COUNT(empno) AS emp_count
FROM emp
GROUP BY deptno;

6. 创建一个视图,此视图要包括以下信息:部门编号,部门名称,员工个数。

1
2
3
4
5
CREATE OR REPLACE VIEW v_dept_emp_details AS
SELECT d.deptno, d.dname, COUNT(e.empno) AS emp_count
FROM dept d
LEFT JOIN emp e ON d.deptno = e.deptno
GROUP BY d.deptno, d.dname;

7. 创建一个视图,此视图要包括以下信息:部门编号,部门名称,员工个数,部门内所有员工薪水的合计,部门内员工最高薪水,部门内员工最低薪水,部门内平均薪水。

1
2
3
4
5
6
7
8
9
10
CREATE OR REPLACE VIEW v_dept_salary_summary AS
SELECT d.deptno, d.dname,
COUNT(e.empno) AS emp_count,
SUM(e.sal) AS total_salary,
MAX(e.sal) AS max_salary,
MIN(e.sal) AS min_salary,
AVG(e.sal) AS avg_salary
FROM dept d
LEFT JOIN emp e ON d.deptno = e.deptno
GROUP BY d.deptno, d.dname;

8. 视图的优缺点

优点

  • 简化查询:将复杂查询封装在视图中,简化 SQL 语句。
  • 数据安全:通过视图限制用户访问敏感数据。
  • 逻辑独立性:视图可以屏蔽底层表结构的变化。
  • 重用性:视图可以被多个查询或应用程序重复使用。

缺点

  • 性能问题:视图是基于查询的虚拟表,每次访问视图时都会执行底层查询,可能导致性能下降。
  • 更新限制:某些视图(如包含聚合函数或连接的视图)不可更新。
  • 维护成本:视图的定义需要维护,尤其是在底层表结构发生变化时。

9. 查询员工表中,第 5 至第 9 条记录。

1
2
3
4
CREATE OR REPLACE VIEW v_emp_pagination AS
SELECT *
FROM (SELECT ROWNUM AS rn, e.* FROM emp e)
WHERE rn BETWEEN 5 AND 9;

创建视图
https://blog.pangcy.cn/2018/10/08/数据库相关/Oracle/SQL 练习/创建视图/
作者
子洋
发布于
2018年10月8日
许可协议