SQL学习笔记_Aliyun3
本笔记为阿里云天池龙珠计划SQL训练营的学习内容,链接为:https://tianchi.aliyun.com/specials/promotion/aicampsql;
视图
视图是一张虚拟的表,而是一个窗口,数据来源建立在真实的表的基础上,而他的作用主要有:
- 通过定义视图可以将频繁使用的SELECT语句保存以提高效率。
- 通过定义视图可以使用户看到的数据更加清晰。
- 通过定义视图可以不对外公开数据表全部字段,增强数据的保密性。
- 通过定义视图可以降低数据的冗余。
创建视图
CREATE VIEW <视图名称>(<列名1>,<列名2>,...) AS <SELECT语句>
Tips:定义视图时不能使用ORDER BY子句因为视图和表一样,数据行都是没有顺序的
Example
- 单表视图
CREATE VIEW productsum (product_type, cnt_product)
AS
SELECT product_type, COUNT(*)
FROM product
GROUP BY product_type ;
- 多表视图
CREATE VIEW view_shop_product(product_type, sale_price, shop_name)
AS
SELECT product_type, sale_price, shop_name
FROM product,
shop_product
WHERE product.product_id = shop_product.product_id; #链接product和shop_product表
修改视图
ALTER VIEW <视图名> AS <SELECT语句>
ALTER VIEW productSum
AS
SELECT product_type, sale_price
FROM Product
WHERE regist_date > '2009-09-11';
更新视图
对于更新视图有很严格的限制:
- SELECT 子句中未使用DISTINCT
- FROM 子句中只有一张表
- 未使用GROUP BY 子句
- 未使用HAVING子句
- 未使用聚合函数 SUM()、MIN()、MAX()、COUNT() 等。
-- 该视图就可以更新,因为在SELECT子句中既没有聚合也没有结合
CREATE VIEW ProductJim (product_id, product_name, product_type,sale_price, purchase_price, regist_date)
AS
SELECT *
FROM Product
WHERE product_type = '办公用品';
-- 更新视图,向视图中添加一行
INSERT INTO ProductJim VALUES ('0009', '印章', '办公用品', 95, 10, '2009-11-30');
删除视图
DROP VIEW 视图名称(<视图列名1>, <视图列名2>, ……)
DROP VIEW ProductSum;
子查询
即嵌套查