首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
第4章 数据更新
4-1 数据的插入(INSERT语句的使用方法)
什么是INSERT
INSERT语句的基本语法
列清单的省略
插入NULL
插入默认值
从其他表中复制数据
4-2 数据的删除(DELETE语句的使用方法)
DROP TABLE语句和DELETE语句
DELETE语句的基本语法
指定删除对象的DELETE语句(搜索型DELETE)
4-3 数据的更新(UPDATE语句的使用方法)
UPDATE语句的基本语法
指定条件的UPDATE语句(搜索型UPDATE)
使用NULL进行更新
多列更新
4-4 事务
什么是事务
创建事务
ACID特性
第5章 复杂查询
5-1 视图
视图和表
创建视图的方法
视图的限制① ——定义视图时不能使用ORDER BY子句
视图的限制② ——对视图进行更新
删除视图
5-2 子查询
子查询和视图
子查询的名称
标量子查询
标量子查询的书写位置
使用标量子查询时的注意事项
5-3 关联子查询
普通的子查询和关联子查询的区别
关联子查询也是用来对集合进行切分的
结合条件一定要写在子查询中
第6章 函数、谓词、CASE表达式
6-1 各种各样的函数
函数的种类
算术函数
字符串函数
日期函数
转换函数
6-2 谓词
什么是谓词
LIKE谓词——字符串的部分一致查询
BETWEEN谓词——范围查询
IS NULL、IS NOT NULL——判断是否为NULL
IN谓词——OR的简便用法
使用子查询作为IN谓词的参数
EXIST谓词
6-3 CASE表达式
什么是CASE表达式
CASE表达式的语法
CASE表达式的使用方法
第7章 集合运算
7-1 表的加减法
什么是集合运算
表的加法——UNION
集合运算的注意事项
包含重复行的集合运算——ALL选项
选取表中公共部分——INTERSECT
记录的减法——EXCEPT
7-2 联结(以列为单位对表进行联结)
什么是联结
内联结——INNER JOIN
外联结——OUTER JOIN
3张以上的表的联结
交叉联结——CROSS JOIN
联结的特定语法和过时语法
当前位置:
首页>>
技术小册>>
SQL基础教程(中)
小册名称:SQL基础教程(中)
### 5-1 视图 在SQL的广阔世界里,视图(View)是一个既强大又灵活的工具,它为用户提供了一个虚拟的表结构,这个结构基于一个或多个实际表的数据,但本身并不存储数据。视图在数据库设计中扮演着多重角色,包括但不限于简化复杂查询、增强数据安全性、以及实现数据的逻辑独立性。本章将深入探讨视图的概念、创建方法、使用场景、以及管理技巧,帮助读者全面掌握SQL视图这一重要特性。 #### 5.1.1 视图的基本概念 **定义**:视图是存储在数据库中的SQL查询语句的结果集,它表现为一个虚拟表。用户可以通过查询视图来间接查询基表(即视图所依赖的实际表)中的数据,而无需直接访问这些基表。视图的内容由查询定义,并且会随着基表数据的更新而动态变化(除非视图被定义为物化视图,这种情况较为特殊,不在本章讨论范围内)。 **特点**: - **虚拟性**:视图本身不存储数据,它只是一个查询结果的展示。 - **安全性**:通过视图,可以限制用户对基表中某些数据的访问,提高数据的安全性。 - **简化查询**:复杂的查询可以被封装在视图中,用户只需简单地查询视图即可获取所需信息。 - **逻辑独立性**:当基表结构发生变化时(如增加列、修改列名等),只要视图的查询语句仍然有效,视图的结构就不会受到影响,从而保证了数据的逻辑独立性。 #### 5.1.2 创建视图 在SQL中,使用`CREATE VIEW`语句来创建视图。基本语法如下: ```sql CREATE VIEW 视图名称 AS SELECT 列名称 FROM 表名称 WHERE 条件; ``` **示例**:假设我们有一个员工表`Employees`,包含`EmployeeID`、`FirstName`、`LastName`、`DepartmentID`等字段,以及一个部门表`Departments`,包含`DepartmentID`和`DepartmentName`字段。如果我们想创建一个视图来展示每个员工的姓名及其所在部门名称,可以这样做: ```sql CREATE VIEW EmployeeDepartments AS SELECT e.FirstName, e.LastName, d.DepartmentName FROM Employees e JOIN Departments d ON e.DepartmentID = d.DepartmentID; ``` 现在,`EmployeeDepartments`就是一个视图,它包含了员工姓名和部门名称的联合查询结果。 #### 5.1.3 使用视图 一旦视图被创建,就可以像使用普通表一样使用它,包括进行SELECT查询、JOIN操作等。但是,需要注意的是,由于视图是基于查询的,因此不能直接在视图上进行INSERT、UPDATE、DELETE等操作(除非视图满足特定条件,如只包含基表的主键列且没有使用聚合函数等)。 **示例查询**: ```sql SELECT * FROM EmployeeDepartments WHERE DepartmentName = 'IT'; ``` 这个查询会返回所有在IT部门的员工的姓名和部门名称。 #### 5.1.4 视图的优势与应用场景 **优势**: 1. **数据抽象**:通过视图,可以将复杂的查询逻辑封装起来,对外提供简洁的数据接口。 2. **安全性**:通过限制对基表中某些列的访问,保护敏感数据不被未授权用户查看。 3. **逻辑数据独立性**:当基表结构发生变化时,只要视图定义不受影响,应用程序就可以继续正常工作。 **应用场景**: - **数据汇总**:创建视图来汇总多个表中的数据,便于管理层进行决策分析。 - **权限控制**:为不同用户或用户组创建不同的视图,限制其对数据的访问范围。 - **复杂查询简化**:将复杂的查询逻辑封装在视图中,简化应用程序中的数据库操作。 - **数据隐藏**:通过视图隐藏基表中的某些列,只展示需要的数据。 #### 5.1.5 管理视图 **修改视图**:在SQL中,直接修改视图结构(如添加或删除列)通常是不被支持的。如果需要修改视图,通常需要删除旧视图并重新创建新视图。但是,一些数据库系统支持使用`ALTER VIEW`语句来修改视图的定义,具体支持情况需参考数据库文档。 **删除视图**:使用`DROP VIEW`语句可以删除一个或多个视图。如果视图被其他视图或存储过程等数据库对象引用,则可能无法直接删除,需要先解除这些引用。 **查看视图定义**:大多数数据库系统提供了查看视图定义的方法,如使用`SHOW CREATE VIEW`(MySQL)、`SELECT TEXT FROM ALL_VIEWS WHERE VIEW_NAME = '视图名称'`(Oracle)等命令。 #### 5.1.6 注意事项 - **性能考虑**:虽然视图提供了很多便利,但频繁查询复杂视图可能会对数据库性能造成影响。因此,在设计视图时,应尽量避免包含大量数据的表的全表扫描,以及复杂的连接和聚合操作。 - **维护成本**:随着基表结构的变化,可能需要定期更新视图定义,以确保视图的有效性和准确性。 - **权限管理**:在授予用户访问视图的权限时,应仔细考虑其对基表数据的潜在访问能力,避免泄露敏感信息。 综上所述,视图是SQL中一个非常有用的特性,它不仅能够简化复杂查询,提高数据安全性,还能在一定程度上实现数据的逻辑独立性。通过合理设计和管理视图,可以显著提升数据库应用的性能和可维护性。
上一篇:
第5章 复杂查询
下一篇:
视图和表
该分类下的相关小册推荐:
SQL基础教程(下)
高性能的Postgres SQL
SQL基础教程(上)
PostgreSQL入门教程