CREATE VIEW
、ALTER VIEW
和 DROP VIEW
视图(View)是 SQL 中的一种虚拟表,是从数据库中一个或多个表的查询结果创建的。它不存储实际数据,而是存储查询的定义,用户可以像使用表一样使用视图。
在实际业务中,视图被广泛用于数据抽象、权限管理、简化复杂查询等场景。
CREATE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;
创建一个视图,显示员工表中姓名和部门:
CREATE VIEW EmployeeDept AS
SELECT employee_id, first_name, department_id
FROM employees;
用途:后续可以直接通过 EmployeeDept
查询员工及其部门信息。
SELECT * FROM EmployeeDept;
创建一个视图,显示薪资高于 5000 的员工:
CREATE VIEW HighSalaryEmployees AS
SELECT employee_id, first_name, salary
FROM employees
WHERE salary > 5000;
用途:筛选高薪员工供管理者分析。
创建一个视图,显示员工姓名及其所属部门名称:
CREATE VIEW EmployeeWithDept AS
SELECT e.first_name AS employee_name, d.department_name
FROM employees e
JOIN departments d ON e.department_id = d.department_id;
用途:可以用此视图代替复杂的连接查询:
SELECT * FROM EmployeeWithDept;
ALTER VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;
原视图 EmployeeDept
显示员工和部门 ID,现在要求添加员工的薪资:
ALTER VIEW EmployeeDept AS
SELECT employee_id, first_name, department_id, salary
FROM employees;
用途:通过更新后的视图,可以查询员工的薪资信息:
SELECT * FROM EmployeeDept;
DROP VIEW view_name;
删除视图 HighSalaryEmployees
:
DROP VIEW HighSalaryEmployees;
视图不能存储数据:
视图是基于查询结果的虚拟表,底层表的数据变化会直接影响视图结果。
视图不能直接使用 ORDER BY:
在创建视图的 SELECT
语句中不能包含 ORDER BY
,除非配合 TOP
或 LIMIT
。
错误示例:
CREATE VIEW SortedView AS
SELECT employee_id, first_name
FROM employees
ORDER BY first_name; -- 错误
视图的更新限制:
通过视图隐藏复杂的数据库结构。例如:
CREATE VIEW SalesSummary AS
SELECT region, SUM(sales) AS total_sales
FROM sales
GROUP BY region;
用户查询 SalesSummary
时无需关心底层表的详细信息。
限制用户访问敏感数据。例如:
CREATE VIEW PublicEmployees AS
SELECT first_name, last_name, department_id
FROM employees;
不给用户访问员工薪资信息的权限,但可以通过视图访问非敏感字段。
对于复杂查询,视图可以简化代码,减少重复编写逻辑。
CREATE VIEW
用于创建视图,简化查询逻辑和数据管理。ALTER VIEW
用于修改现有视图定义以适应需求变化。DROP VIEW
用于删除不再需要的视图,不会影响底层表数据。