zoukankan      html  css  js  c++  java
  • SQL系列(十四)—— 视图(view)

    说到视图view,大家应该都很熟悉。如几何学中用三视图来描述集合物体的外观构成,三视图中反应出物体的面貌。这里我们讨论数据库中视图的概念:

    • 什么是视图
    • 为什么会有会用视图
    • 怎样使用视图
    • 视图与表的异同点

    ###1.什么是视图 视图:以一定的视角看数据。即视图是一张虚拟的表,本身不存储任何数据,数据都来源于实际的表中。有查询的SQL构成,查询的SQL的结果可以看成是一张虚拟的表即是一种看待的数据的方式,所以这种操作实际就是数据视图。

    注:是不是和三视图有点像,都是实物的虚拟描述。

    看一个例子加深认识:

    CREATE VIEW ProductsView AS SELECT cust_name, cust_contact
    FROM Customers, Orders, OrderItems
    WHERE Customers.cust_id = Orders.cust_id
    AND OrderItems.order_num = Orders.order_num
    

    使用视图:

    SELECT * FROM ProductView WHERE order_num = 'shang1';
    

    这就是视图的应用,基于查询检索创建视图描述,然后查询时直接使用视图。

    2.为什么要用视图

    上面说到视图基于查询SQL,是一张虚表。从定义描述中可以看出,使用视图会带来以下的好处:

    • 把复杂的查询SQL简化,为复杂的SQL创建视图,应用中只要根据条件过滤查询视图即可
    • 基于视图,可以重复利用SQL,一次编写,多次运行
    • 视图既然是基于查询SQL,那么可以对返回的结果做一定的控制,所以视图可以用来做一定的权限控制

    ###3.怎样使用

    现在有三张表:学生表,课程表,选课表

    如果需要查询张三选了那些课程信息:

    SELECT c.id FROM scourse AS sc INNER JOIN student AS s ON sc.c_id = s.c_id AND s.name = '张三';
    

    以上需要连接查询,SQL较为复杂,可以创建视图:

    CREATE VIEW SCVIEW AS 	SELECT c.id FROM scourse AS sc INNER JOIN student AS s ON sc.c_id = s.c_id;
    

    然后查询时:

    SELECT * FROM SCVIEW WHERE name  = '张三';
    

    这样就起到SQL简化的作用了

    同样如果需要查询李四选修的课程:

    SELECT * FROM SCVIEW WHERE name  = '李四';
    

    这样就可以重复利用SQL了


    ###4.视图与表的异同点 ####1.相同点
    • 都可以用于检索数据
    • 查询时语法相同,都是使用SELECT、FROM、WHERE子句
    • 视图和表都可以连接嵌套查询

    2.差异点

    • 视图是虚表,没有关于列的定义,而表有列定义
    • 视图是虚表,只是一种表示数据的方式,而表时物理实体,存储实际的行数据
    • 视图不能修改数据,而表可以修改数据
    • 视图上不能创建索引,表上可以创建索引
    参考

    《SQL必知必会》

  • 相关阅读:
    POJ 1811 Prime Test(Miller-Rabin & Pollard-rho素数测试)
    HDU 3037 Saving Beans(Lucas定理模板题)
    HDU 5029 Relief grain(离线+线段树+启发式合并)(2014 ACM/ICPC Asia Regional Guangzhou Online)
    Java进阶(二)当我们说线程安全时,到底在说什么
    UML建模一般流程
    Spring事务管理(详解+实例)
    Spring 的 BeanPostProcessor接口实现
    Spring中ApplicationContext和beanfactory区别
    使用Maven Release插件发布项目
    tair与redis比较总结
  • 原文地址:https://www.cnblogs.com/lxyit/p/9354440.html
Copyright © 2011-2022 走看看