zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    keepAliveTime为0以及队列太小导致ThreadPoolExecutor不断创建新线程
    Python str方法
    Python 复制与赋值
    Python 使用pypi镜像源加速第三方库在线安装
    Python ez_setup.py安装错误
    Tools psr
    Python 列表生成试中的if,if else
    Python 执行方法shift+enter
    Python
    DOS 切换文件夹
  • 原文地址:https://www.cnblogs.com/jp-mao/p/6622555.html
Copyright © 2011-2022 走看看