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

  • 相关阅读:
    第一章 zookeeper基础概念
    ntp服务
    nfs与dhcp服务
    samba、ftp和ssh服务
    Linux系统的RAID磁盘阵列
    Linux系统中lvm简介
    Linux系统中的计划任务
    Linux权限管理
    Linux用户及组管理
    简谈OSI七层模型(网络层)
  • 原文地址:https://www.cnblogs.com/jp-mao/p/6622555.html
Copyright © 2011-2022 走看看