先看总体,Task03的知识点分为5个,视图、子查询、函数、谓词、CASE表达式。
1.视图
1.1 什么是视图?简单来说是一张虚拟表。
1.2 视图和表有什么区别?可以理解为必须有蛋糕【真实表】才能用刀 【SELECT语句】切出块【视图】来,所以视图它是依赖于真实表的。
1.3 为什么会存在视图?
其实这个问题是问视图的优点,说到优点我就会想到缺点,就自行了解了一下视图的缺点:https://blog.csdn.net/tianlaiwusheng/article/details/4655352 (个人认为这篇文章说的比较细致,最好也自行了解一下做个综合判断啦~)
回归正题,上图根据自己的理解调整了一下顺序,简单理解就是蛋糕切块拿出来参观快捷方便,不容易损坏。
1.4 创建视图和创建视图的注意事项
创建视图的语句AS前等于是你要的视图样式,AS后面SELECT语句等于是视图你要放的数据。
注意事项最主要是要搞清楚不能使用ORDER BY语句,要注意这说的是创建的时候,而不是创建成功后查询数据时,那为啥创建的时候不能使用呢?因为数据行都是没有顺序的
还有一个小知识点,可以在视图之上再创建视图,不过不太建议。
1.5 视图的修改、更新、删除。
视图的修改等同于重新创建了视图,
更新操作由于涉及到和真实表的关联关系,不建议使用,这里也就是视图的缺点了,自行了解哈
删除操作就很好理解了。
2.子查询
2.1 什么是子查询?
我理解的子查询和视图有点相似都是整体再切块,区别在于子查询切块后就被吃掉了,一次性的,而视图是可以重复参观的。
2.2 三种类型的子查询:嵌套子查询、标量子查询、关联子查询
嵌套子查询:简单理解就是蛋糕切块再切块,不过越切越不好切,所以要避免切太小。
标量子查询:只返回一个结果(我就要这一小块蛋糕)
关联子查询:两块蛋糕相关的面拼起来一起“欣赏”【查询数据】
练习题
1.
CREATE VIEW ViewPractice5_1 AS
SELECT product_name, sale_price, regist_date
FROM product
WHERE sale_price >= 1000
AND regist_date = '2009-09-20';
2.
product中添加数据成功,ViewPractice5_1视图中没有数据添加,因为不满足条件regist_date = ‘2009-09-20’。
3.
SELECT product_id,product_name,product_type,sale_price,
(SELECT AVG(sale_price) FROM product) AS sale_price_avg
FROM product;
4.
CREATE VIEW AvgPriceByType AS
SELECT product_id,product_name,product_type,sale_price,
(SELECT AVG(sale_price)
FROM product p2
WHERE p1.product_type = p2.product_type
GROUP BY p1.product_type) AS sale_price_avg_type
FROM product p1;