zoukankan      html  css  js  c++  java
  • sql视图实例

    一个视图是一个或一组SQL语句,存储在数据库中相关的名称。一个视图实际上是一个预定义的SQL查询中的表的形式组成。

    一个视图可以包含一个表的所有行,或选择表中的行。从一个或多个表上写SQL查询创建一个视图,视图可以被创建。

    这是一种虚拟表的视图,允许用户执行以下操作:

    • 发现自然或直观的用户或用户类的结构数据的方式。

    • 限制访问的数据,例如,用户可以看到和(有时)修改正是他们所需要的并没有更多。

    • 总结从可以用于生成报告的各种表的数据。

    创建视图:

    使用CREATE VIEW语句创建数据库视图。从一个单一的表,多个表,或另一个视图也可以再创建视图。

    要创建一个视图,用户根据具体的实施必须有相应的系统权限。

    基本的CREATE VIEW语法如下:

    CREATE VIEW view_name AS
    SELECT column1, column2.....
    FROM table_name
    WHERE [condition];

    在使用过程中正常的SQL SELECT查询,可以包含多个表的SELECT语句中的方式非常相似。

    实例:

    考虑CUSTOMERS表中有以下记录:

    +----+----------+-----+-----------+----------+
    | ID | NAME     | AGE | ADDRESS   | SALARY   |
    +----+----------+-----+-----------+----------+
    |  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
    |  2 | Khilan   |  25 | Delhi     |  1500.00 |
    |  3 | kaushik  |  23 | Kota      |  2000.00 |
    |  4 | Chaitali |  25 | Mumbai    |  6500.00 |
    |  5 | Hardik   |  27 | Bhopal    |  8500.00 |
    |  6 | Komal    |  22 | MP        |  4500.00 |
    |  7 | Muffy    |  24 | Indore    | 10000.00 |
    +----+----------+-----+-----------+----------+

    现在,以下是从CUSTOMERS表中创建一个视图的例子。这个视图将被用来从CUSTOMERS表中有客户的姓名和年龄:

    SQL > CREATE VIEW CUSTOMERS_VIEW AS
    SELECT name, age
    FROM  CUSTOMERS;

    现在,可以查询CUSTOMERS_VIEW以类似方式作为查询一个实际的表。下面的例子:

    SQL > SELECT * FROM CUSTOMERS_VIEW;

    这将产生以下结果:

    +----------+-----+
    | name     | age |
    +----------+-----+
    | Ramesh   |  32 |
    | Khilan   |  25 |
    | kaushik  |  23 |
    | Chaitali |  25 |
    | Hardik   |  27 |
    | Komal    |  22 |
    | Muffy    |  24 |
    +----------+-----+

    WITH CHECK OPTION:

    在视图定义中WITH CHECK OPTION是一个CREATE VIEW语句选项。 WITH CHECK OPTION的目的是为了确保所有的UPDATE和INSERT语句中满足条件。

    如果他们不符合条件,UPDATE或INSERT会返回一个错误。

    使用WITH CHECK OPTION创建相同的观点CUSTOMERS_VIEW下面是一个例子:

     

    CREATE VIEW CUSTOMERS_VIEW AS
    SELECT name, age
    FROM  CUSTOMERS
    WHERE age IS NOT NULL
    WITH CHECK OPTION;

    没有一个AGE列中的NULL值的数据,因为该视图定义了WITH CHECK OPTION在这种情况下,应该拒绝任何NULL值在视图的AGE列写入。

    更新视图:

    在一定条件下可以更新一个视图:

    • SELECT子句不包含关键字DISTINCT。

    • SELECT子句不包含汇总函数。

    • SELECT子句不包含设定的函数。

    • SELECT子句不包含集合运算符。

    • SELECT子句中不包含ORDER BY子句。

    • FROM子句可以包含多个表。

    • 在WHERE子句中不包含子查询。

    • 该查询不包含GROUP BY或HAVING。

    • 计算列可能不被更新。

    • 从基表中必须包括视图,以便INSERT查询功能所有NOT NULL列。

    因此,如果一个视图满足上述所有规则,那么就可以更新视图。以下是一个例子,更新Ramesh的年龄:

    SQL > UPDATE CUSTOMERS_VIEW
          SET AGE = 35
          WHERE name='Ramesh';

    这将最终更新基表的客户,同样会反映在视图本身。现在尝试查询的基表,SELECT语句将产生以下结果:

     

    +----+----------+-----+-----------+----------+
    | ID | NAME     | AGE | ADDRESS   | SALARY   |
    +----+----------+-----+-----------+----------+
    |  1 | Ramesh   |  35 | Ahmedabad |  2000.00 |
    |  2 | Khilan   |  25 | Delhi     |  1500.00 |
    |  3 | kaushik  |  23 | Kota      |  2000.00 |
    |  4 | Chaitali |  25 | Mumbai    |  6500.00 |
    |  5 | Hardik   |  27 | Bhopal    |  8500.00 |
    |  6 | Komal    |  22 | MP        |  4500.00 |
    |  7 | Muffy    |  24 | Indore    | 10000.00 |
    +----+----------+-----+-----------+----------+

    插入一数据到视图:

    行的数据可以被插入到一个视图。同样的规则也适用于UPDATE命令也适用于INSERT命令。

    在这里,我们可以不插入行,因为我们并没有在该视图中的所有NOT NULL列在CUSTOMERS_VIEW,否则就可以在以类似方式,将其插入表中的插入行。

    在视图中删除数据:

    可以从视图中被删除的数据行。同样的规则也适用于UPDATE和INSERT命令适用于DELETE命令。

    下面是一个例子,删除AGE =22一条记录。

    SQL > DELETE FROM CUSTOMERS_VIEW
          WHERE age = 22;

    最终,这将删除从基表中的客户和相同的行会反映在视图本身。现在尝试查询的基表,SELECT语句将产生以下结果:

    +----+----------+-----+-----------+----------+
    | ID | NAME     | AGE | ADDRESS   | SALARY   |
    +----+----------+-----+-----------+----------+
    |  1 | Ramesh   |  35 | Ahmedabad |  2000.00 |
    |  2 | Khilan   |  25 | Delhi     |  1500.00 |
    |  3 | kaushik  |  23 | Kota      |  2000.00 |
    |  4 | Chaitali |  25 | Mumbai    |  6500.00 |
    |  5 | Hardik   |  27 | Bhopal    |  8500.00 |
    |  7 | Muffy    |  24 | Indore    | 10000.00 |
    +----+----------+-----+-----------+----------+

    删除视图:

    很显然,当需要一个丢弃视图,如果它不再需要。它的语法很简单,如下所示:

    DROP VIEW view_name;

    以下是一个例如,从CUSTOMERS表丢弃CUSTOMERS_VIEW:

    DROP VIEW CUSTOMERS_VIEW;
  • 相关阅读:
    Soap1.1和Soap1.2的区别
    常用开源软件许可协议简介
    Web优化之Javascript Compressor
    Web优化之YaHoo Web优化的14条法则
    Installing Cygwin on Windows 7 And Configure SSH
    Different Between Cygwin And MinGw
    xml读取异常Invalid byte 1 of 1-byte UTF-8 sequence
    JAVA事务系列三:JTA事务
    JAVA事务系列二:JDBC事务
    帅才将才慧才
  • 原文地址:https://www.cnblogs.com/xiaz/p/5324504.html
Copyright © 2011-2022 走看看