使用表时,会将数据保存在存储设备(硬盘上)
而使用视图时,并不会将数据保存在存储设备上,也不会将数据保存在任何地方。
视图里面保存的是 从表中取出数据所使用的SELECT语句(视图中的数据会随着原表的变化自动更新)。
查视图时,视图会在内部执行该SELECT语句并创建一张临时表。
优点:
CREATE VIEW 视图名称(<视图列名1>, <视图列名2>, ……)
AS
在视图的基础上创建视图。
缺点:多重视图会降低 SQL 的性能
DROP VIEW 视图名称
简单地说, 子查询就是一次性视图。因为子查询在SELECT语句执行完毕后就会消失
子查询就是将用来定义视图的 SELECT 语句直接用于FROM 子句当中。
注意:
Oracle
的FROM
子句中,不能使用AS
执行顺序:
内层的子查询 ——> 外层的查询
就是返回一行一列的子查询
一般情况下,标量子查询的 返回值 可以用在 = 或者 <> 这样需要单一值的比较运算符之中
书写位置:任何可以使用单一值的位置都可以使用。
在子查询中添加 where子句
作用是用于对集合进行切分。
SELECT product_type, product_name, sale_price
FROM Product AS P1
WHERE sale_price > (SELECT AVG(sale_price)
FROM Product AS P2
**WHERE P1.product_type = P2.product_type**
GROUP BY product_type);
关于作用域: 1. 子查询内部设定的关联名称,只能在该子查询内部使用
谓词的返回值都是真值
模糊查询
模糊匹配的符号:
范围查询。
会包含临界值
判断是否为空
指定多个条件
IN(值1,值2,值3, .....)
SELECT product_name, sale_price
FROM Product
WHERE product_id IN (SELECT product_id
FROM ShopProduct
WHERE shop_id = '000C');
判断记录是否存在。
谓词的作用就是“判断是否存在满足某种条件的记录”。 如果存在这样的记录就返回真(TRUE),如果不存在就返回假(FALSE)。 EXIST(存在)谓词的主语是“记录”。
右侧写一个参数,通常是一个子查询。
-- 查询存在于ShopProduct 中的商品
SELECT product_name, sale_price
FROM Product AS P
WHERE EXISTS (SELECT *
FROM ShopProduct AS SP
WHERE SP.shop_id = '000C'
AND SP.product_id = P.product_id);
用NOT EXIST表示不存在某个表中。
Oracle中的DECODE就是CASE … WHEN … 语句
条件分支语句。
CASE WHEN <求值表达式> THEN <表达式>
WHEN <求值表达式> THEN <表达式>
WHEN <求值表达式> THEN <表达式>
. . .
ELSE <表达式> -- 可以省略ELSE
END -- END不能省略