5、视图

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

 

posted @ 2017-03-26 13:31  起航追梦人  阅读(241)  评论(0编辑  收藏  举报