5-1视图
1、视图与表是相同的,两者区别在表中保存的是实际的数据,而视图中保存的是SELECT语句(视图本身并不保存储数据)。
2、使用视图,可以很简单完成跨多表查询数据等复杂操作。
3、可以把SELECT语句做成视图来使用。
4、创建视图需要使用CREATE VIEW语句。
5、视图不能使用ORDER BY和使用有限制更新操作。
6、删除视图需要使用DROP VIEW语句。
5-1-1:视图的优点
法则:表中存的是实际的数据,而视图中保存的是从表中取出数据的SELECT语句。
法则:应该把经常使用的SELECT语句做成视图。
5-1-2:创建视图
语法:CREATE VIEW 视图名称(<视图列名1>,<视图列名2>,....)
AS
SELECT语句;
-- 创建ShohinSum视图 CREATE VIEW ShohinSum (shohin_bunrui,cnt_shohin) AS SELECT shohin_bunrui,COUNT(*) FROM Shohin GROUP BY shohin_bunrui;
-- 查看视图 SELECT * FROM ShohinSum;
5-1-3:多重视图(在视图中创建视图)
CREATE VIEW ShohinSumJin(shohin_bunrui,cnt_shohin) AS SELECT shohin_bunrui,cnt_shohin FROM ShohinSum WHERE shohin_bunrui = '办公用品';
法则:应该避免在视图的基础上创建视图(多重视图会降低性能)。
法则:定义视图不要使用ORDER BY语句(有些DBMS不支持)。
法则:视图与表需要同时更新,因此通过聚合得到的视图无法进行更新。
5-1-4:删除视图
语法:DROP VIEW 视图名称(<视图列名1>,<视图列名2>,....);
DROP VIEW ShohinSum;
5-2子查询
SELECT shohin_bunrui,cnt_shohin FROM (SELECT shohin_bunrui,COUNT(*) AS cnt_shohin FROM shohin GROUP BY shohin_bunrui) AS ShohinSum;
法则:子查询会先执行内层查询。
5-2-1:标量子查询
法则:标量子查询就是返回单一值的子查询。
-- 查询销售单价高于平均销售单价的商品 SELECT shohin_id,shohin_mei,hanbai_tanka FROM Shohin WHERE hanbai_tanka > (SELECT AVG(hanbai_tanka) FROM Shohin);
标量子查询的书写位置:SELECT子句、GROUP BY子句、HAVING子句和ORDER BY子句。
5-2关联子查询
1、关联子查询在细分组内进行比较时间使用
2、关联子查询和GROUP BY子句一样,也可以对表中的数数进行切分
3、关联子查询的结合条件如果未出现在子查询之中就会发生错误
-- 按照商品分类与平均销售单价进行比较 SELECT shohin_id,shohin_mei,hanbai_tanka FROM Shohin WHERE hanbai_tanka > (SELECT AVG(hanbai_tanka) FROM Shohin GROUP BY shohin_bunrui);
-- 按照商品分类与平均销售单价进行比较 SELECT shohin_id,shohin_mei,hanbai_tanka FROM Shohin AS S1 WHERE hanbai_tanka > ( SELECT AVG(hanbai_tanka) FROM Shohin AS S2 WHERE S1.shohin_bunrui = S2.shohin_bunrui GROUP BY shohin_bunrui);
结合条件一定要写在子查询中 WHERE S1.shohin_bunrui = S2.shohin_bunrui