1.视图
什么是视图
从SQL 的角度来看视图就是一张表
视图是一种虚拟表,其内容由查询定义。和真实的表类似,视图包含一系列带有名称的列和行数据。但是,视图在数据库中并不以存储的数据值集形式存在,它的数据来自定义视图查询时所引用的表,并且在引用视图时动态生成。
视图的定义是基于基本表的,与直接操作基本表相比,视图有以下优点:
- 由于视图无需保存数据,因此可以节省存储设备的容量
- 可以将频繁使用的 SELECT 语句保存成视图,这样就不用每次都重新书写了
- 对机密数据提供安全保护
使用视图
创建(修改)视图
-- 创建/修改视图
CREATE OR REPLACEVIEW view_name (column1,...)
AS
select_statement;
-- 修改视图
ALTER view_name (column1,...)
AS
select_statement;
在创建视图时,没有在视图名后面指定字段列表,则视图中字段列表默认和SELECT语句中的字段列表一致。如果SELECT语句中给字段取了别名,那么视图中的字段名和别名相同
查看视图
-- 查看表、视图等对象
SHOW TABLES;
-- 查看视图结构
DESC/DESCRIBE view_name;
-- 查看视图详细定义信息
SHOW CREATE VIEW producttype;
删除视图
DROP VIEW IF EXISTS view_name;
2.子查询
子查询
子查询就是将用来定义视图的SELECT语句直接用于FROM子句当中。从相对位置来说,子查询又被称为内查询,主查询又被称为外查询。
使用子查询时,需要将其放入”()”内,并使用AS关键字为其命名(ORACLE中不使用AS关键字)。
标量子查询
标量子查询就是返回单一值的子查询。
标量子查询的书写位置并不仅仅局限于 WHERE 子句中,通常任何可以使用单一值的位置都可以使用。也就是说,能够使用常数或者列名的地方,无论是 SELECT 子句、GROUP BY 子句、HAVING 子句,还是ORDER BY 子句,几乎所有的地方都可以使用。
关联子查询
SELECT column1, column2, ...
FROM table1 AS o
WHERE column1 operator (SELECT column3
FROM table2 AS i
WHERE i.expr1=o.expr2);