- SQL 教程
- SQL - 首页
- SQL - 概述
- SQL - RDBMS 概念
- SQL - 数据库
- SQL - 语法
- SQL - 数据类型
- SQL - 运算符
- SQL - 表达式
- SQL 数据库
- SQL - 创建数据库
- SQL - 删除数据库
- SQL - 选择数据库
- SQL - 重命名数据库
- SQL - 显示数据库
- SQL - 备份数据库
- SQL 表
- SQL - 创建表
- SQL - 显示表
- SQL - 重命名表
- SQL - 截断表
- SQL - 克隆表
- SQL - 临时表
- SQL - 修改表
- SQL - 删除表
- SQL - 删除表
- SQL - 约束
- SQL 查询
- SQL - INSERT 查询
- SQL - SELECT 查询
- SQL - SELECT INTO
- SQL - INSERT INTO SELECT
- SQL - UPDATE 查询
- SQL - DELETE 查询
- SQL - 排序结果
- SQL 视图
- SQL - 创建视图
- SQL - 更新视图
- SQL - 删除视图
- SQL - 重命名视图
- SQL 运算符和子句
- SQL - WHERE 子句
- SQL - TOP 子句
- SQL - DISTINCT 子句
- SQL - ORDER BY 子句
- SQL - GROUP BY 子句
- SQL - HAVING 子句
- SQL - AND & OR
- SQL - BOOLEAN (BIT) 运算符
- SQL - LIKE 运算符
- SQL - IN 运算符
- SQL - ANY, ALL 运算符
- SQL - EXISTS 运算符
- SQL - CASE
- SQL - NOT 运算符
- SQL - 不等于
- SQL - IS NULL
- SQL - IS NOT NULL
- SQL - NOT NULL
- SQL - BETWEEN 运算符
- SQL - UNION 运算符
- SQL - UNION 与 UNION ALL
- SQL - INTERSECT 运算符
- SQL - EXCEPT 运算符
- SQL - 别名
- SQL 连接
- SQL - 使用连接
- SQL - INNER JOIN
- SQL - LEFT JOIN
- SQL - RIGHT JOIN
- SQL - CROSS JOIN
- SQL - FULL JOIN
- SQL - 自连接
- SQL - DELETE JOIN
- SQL - UPDATE JOIN
- SQL - LEFT JOIN 与 RIGHT JOIN
- SQL - UNION 与 JOIN
- SQL 密钥
- SQL - 唯一键
- SQL - 主键
- SQL - 外键
- SQL - 组合键
- SQL - 备选键
- SQL 索引
- SQL - 索引
- SQL - 创建索引
- SQL - 删除索引
- SQL - 显示索引
- SQL - 唯一索引
- SQL - 聚簇索引
- SQL - 非聚簇索引
- 高级 SQL
- SQL - 通配符
- SQL - 注释
- SQL - 注入
- SQL - 托管
- SQL - MIN & MAX
- SQL - NULL 函数
- SQL - CHECK 约束
- SQL - DEFAULT 约束
- SQL - 存储过程
- SQL - NULL 值
- SQL - 事务
- SQL - 子查询
- SQL - 处理重复项
- SQL - 使用序列
- SQL - 自动递增
- SQL - 日期和时间
- SQL - 游标
- SQL - 公共表表达式
- SQL - GROUP BY 与 ORDER BY
- SQL - IN 与 EXISTS
- SQL - 数据库调优
- SQL 函数参考
- SQL - 日期函数
- SQL - 字符串函数
- SQL - 聚合函数
- SQL - 数值函数
- SQL - 文本和图像函数
- SQL - 统计函数
- SQL - 逻辑函数
- SQL - 游标函数
- SQL - JSON 函数
- SQL - 转换函数
- SQL - 数据类型函数
- SQL 有用资源
- SQL - 问答
- SQL - 快速指南
- SQL - 有用函数
- SQL - 有用资源
- SQL - 讨论
SQL - 使用视图
视图只不过是存储在数据库中并具有关联名称的 SQL 语句。视图实际上是以预定义的 SQL 查询形式组成的表。
视图可以包含表的所有行或表的选定行。视图可以从一个或多个表创建,这取决于编写用于创建视图的 SQL 查询。
视图是一种虚拟表,允许用户执行以下操作:
以用户或用户类别认为自然或直观的方式组织数据。
以某种方式限制对数据的访问,以便用户只能看到(有时)修改他们需要的内容,而不会更多。
汇总来自多个表的數據,可用于生成报表。
创建视图
数据库视图使用CREATE VIEW语句创建。视图可以从单个表、多个表或另一个视图创建。
要创建视图,用户必须根据具体的实现拥有相应的系统权限。
基本的CREATE VIEW语法如下:
CREATE VIEW view_name AS SELECT column1, column2..... FROM table_name WHERE [condition];
您可以像在普通的 SQL SELECT 查询中一样,在 SELECT 语句中包含多个表。
示例
考虑 CUSTOMERS 表具有以下记录:
+----+----------+-----+-----------+----------+ | ID | NAME | AGE | ADDRESS | SALARY | +----+----------+-----+-----------+----------+ | 1 | Ramesh | 32 | Ahmedabad | 2000.00 | | 2 | Khilan | 25 | Delhi | 1500.00 | | 3 | kaushik | 23 | Kota | 2000.00 | | 4 | Chaitali | 25 | Mumbai | 6500.00 | | 5 | Hardik | 27 | Bhopal | 8500.00 | | 6 | Komal | 22 | MP | 4500.00 | | 7 | Muffy | 24 | Indore | 10000.00 | +----+----------+-----+-----------+----------+
以下是如何从 CUSTOMERS 表创建视图的示例。此视图将用于获取 CUSTOMERS 表中的客户姓名和年龄。
SQL > CREATE VIEW CUSTOMERS_VIEW AS SELECT name, age FROM CUSTOMERS;
现在,您可以像查询实际表一样查询 CUSTOMERS_VIEW。以下是一个示例。
SQL > SELECT * FROM CUSTOMERS_VIEW;
这将产生以下结果。
+----------+-----+ | name | age | +----------+-----+ | Ramesh | 32 | | Khilan | 25 | | kaushik | 23 | | Chaitali | 25 | | Hardik | 27 | | Komal | 22 | | Muffy | 24 | +----------+-----+
WITH CHECK OPTION
WITH CHECK OPTION 是 CREATE VIEW 语句的一个选项。WITH CHECK OPTION 的目的是确保所有 UPDATE 和 INSERT 都满足视图定义中的条件。
如果它们不满足条件,则 UPDATE 或 INSERT 将返回错误。
以下代码块包含创建具有 WITH CHECK OPTION 的相同视图 CUSTOMERS_VIEW 的示例。
CREATE VIEW CUSTOMERS_VIEW AS SELECT name, age FROM CUSTOMERS WHERE age IS NOT NULL WITH CHECK OPTION;
在这种情况下,WITH CHECK OPTION 应该拒绝在视图的 AGE 列中输入任何 NULL 值,因为视图是由 AGE 列中没有 NULL 值的数据定义的。
更新视图
视图可以在某些条件下更新,如下所示:
SELECT 子句可能不包含 DISTINCT 关键字。
SELECT 子句可能不包含汇总函数。
SELECT 子句可能不包含集合函数。
SELECT 子句可能不包含集合运算符。
SELECT 子句可能不包含 ORDER BY 子句。
FROM 子句可能不包含多个表。
WHERE 子句可能不包含子查询。
查询可能不包含 GROUP BY 或 HAVING。
无法更新计算列。
为了使 INSERT 查询能够工作,必须在视图中包含来自基表的所有 NOT NULL 列。
因此,如果视图满足上述所有规则,则可以更新该视图。以下代码块包含一个更新 Ramesh 年龄的示例。
SQL > UPDATE CUSTOMERS_VIEW SET AGE = 35 WHERE name = 'Ramesh';
这最终将更新基表 CUSTOMERS,并且相同的更新将反映在视图本身中。现在,尝试查询基表,SELECT 语句将产生以下结果。
+----+----------+-----+-----------+----------+ | ID | NAME | AGE | ADDRESS | SALARY | +----+----------+-----+-----------+----------+ | 1 | Ramesh | 35 | Ahmedabad | 2000.00 | | 2 | Khilan | 25 | Delhi | 1500.00 | | 3 | kaushik | 23 | Kota | 2000.00 | | 4 | Chaitali | 25 | Mumbai | 6500.00 | | 5 | Hardik | 27 | Bhopal | 8500.00 | | 6 | Komal | 22 | MP | 4500.00 | | 7 | Muffy | 24 | Indore | 10000.00 | +----+----------+-----+-----------+----------+
向视图中插入行
可以将数据行插入到视图中。应用于 UPDATE 命令的相同规则也适用于 INSERT 命令。
在这里,我们不能在 CUSTOMERS_VIEW 中插入行,因为我们没有在此视图中包含所有 NOT NULL 列,否则您可以像在表中插入行一样在视图中插入行。
从视图中删除行
可以从视图中删除数据行。应用于 UPDATE 和 INSERT 命令的相同规则也适用于 DELETE 命令。
以下是如何删除 AGE = 22 的记录的示例。
SQL > DELETE FROM CUSTOMERS_VIEW WHERE age = 22;
这最终将从基表 CUSTOMERS 中删除一行,并且相同的更新将反映在视图本身中。现在,尝试查询基表,SELECT 语句将产生以下结果。
+----+----------+-----+-----------+----------+ | ID | NAME | AGE | ADDRESS | SALARY | +----+----------+-----+-----------+----------+ | 1 | Ramesh | 35 | Ahmedabad | 2000.00 | | 2 | Khilan | 25 | Delhi | 1500.00 | | 3 | kaushik | 23 | Kota | 2000.00 | | 4 | Chaitali | 25 | Mumbai | 6500.00 | | 5 | Hardik | 27 | Bhopal | 8500.00 | | 7 | Muffy | 24 | Indore | 10000.00 | +----+----------+-----+-----------+----------+
删除视图
显然,如果不再需要视图,则需要一种删除视图的方法。语法非常简单,如下所示:
DROP VIEW view_name;
以下是如何从 CUSTOMERS 表中删除 CUSTOMERS_VIEW 的示例。
DROP VIEW CUSTOMERS_VIEW;