本节将学习一些SQL查询语句的复杂用法,
在SQL中,视图是基于 SQL 语句的结果集的可视化的表。视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。我们可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,我们也可以提交数据,就像这些来自于某个单一的表,但它实际不是真实的表。视图与表的区别在于“是否保存了实际的数据”,其数据来源均建立在真实表的基础上。
1、视图介绍
创建视图的语法如下:
CREATE VIEW 视图名 AS
SELECT 列名
FROM 表名
WHERE 查询条件;
如果需要更新视图中的列或者其他信息,无需删除,使用 CREATE OR REPLACE VIEW
选项。而删除视图,使用 DROP
即可。
之所以要采用视图,是基于以下几点原因。
- 通过定义视图可以将频繁使用的SELECT语句保存以提高效率。
- 通过定义视图可以使用户看到的数据更加清晰。
- 通过定义视图可以不对外公开数据表全部字段,增强数据的保密性。
- 通过定义视图可以降低数据的冗余。
因为视图和表一样,数据行都是没有顺序的,所以,在一般的DBMS中定义视图时不能使用ORDER BY语句。在 MySQL中视图的定义是允许使用 ORDER BY 语句的,但是若从特定视图进行选择,而该视图使用了自己的 ORDER BY 语句,则视图定义中的 ORDER BY 将被忽略。
修改视图的语法如下。
ALTER VIEW <视图名> AS <SELECT语句>
更新视图的语法如下。
UPDATE <视图名> SET 语句 WHERE 语句
视图归根结底还是从表派生出来的,因此,如果原表可以更新,那么视图中的数据也可以更新。反之,修改视图的内容,数据表也会相应更新,注意,这是有条件地更新,因为视图只是原表的一个窗口,所以它修改也只能修改透过窗口能看到的内容。
删除的视图的语法如下。
DROP VIEW <视图名1> [ , <视图名2> …]
2、子查询
子查询就是将一个查询的结果作为另一个查询(主查询