一个视图是一个或一组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;

sql视图实例的更多相关文章

  1. SQL触发器实例讲解

    SQL触发器实例1 定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序.触发器是一个特殊的存储过程. 常见的触发器有三种:分别应用于Inser ...

  2. SQL触发器实例

    SQL触发器实例讲解(本文是来自百度文库) 备注:本人建了一个站特价汇,我想记录每个商品的点击量,然后按照点击量来牌名商品,想要提高效率,所以必须得用触发器,下面是本人在百度文库中的找到的学习资料,分 ...

  3. sql视图学习笔记--视图

    视图是为用户对数据多种显示需求而创建的,其主要用在一下几种情况: (1)限制用户只能访问特定表特定条件的内容,提高系统的安全性. (2)隐藏表结构.创建多种形式的数透视,满足不同用户需求. (3)将复 ...

  4. SQL语句实例集合

    SQL语句实例 表操作     例 1  对于表的教学管理数据库中的表 STUDENTS ,可以定义如下: CREATE  TABLE  STUDENTS (SNO      NUMERIC (6, ...

  5. SQL触发器实例(下)

    基本语法: Create Trigger [TriggerName] ON [TableName] FOR [Insert][,Delete][,Update] AS --触发器要执行的操作语句. G ...

  6. SQL 视图(Views)

    SQL 视图(Views) 视图是可视化的表. 本章讲解如何创建.更新和删除视图. SQL CREATE VIEW 语句 在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表. 视图包含行和列 ...

  7. SQL经典实例笔记

    目录 前言 第一章:检索记录 在Where字句中使用别名 前言 本文是根据我阅读的书籍SQL经典实例而写的笔记,只记载我觉得有价值的内容 第一章:检索记录 在Where字句中使用别名 --错误实例 s ...

  8. SQL 视图 临时表 存储过程 索引 事务

    视图: 视图是按照你的sql语句生成的一个虚拟的东西,本身并不占数据库的空间 创建视图 create view view_1 as select id from table_1 当你表里的数据增加或者 ...

  9. SQL/T-SQL实例参考

    ,D.[Score] B_Score ,'Distince'= CASE WHEN C.Score > D.Score THEN C.[Score] - D.[Score] WHEN C.Sco ...

随机推荐

  1. CSS权威指南 - 内边距 边框 和 外边距

    九十年代的完全用表格布局,简单的段落边框都需要用表格.CSS让布局更方便. 基本元素框 basic element boxes 如同第七章基本视觉格式化那一章讲到,每个文档元素会生成一个元素框,这个框 ...

  2. ExtJS笔记 Proxy

    Proxies are used by Stores to handle the loading and saving of Model data. Usually developers will n ...

  3. RHEL/CentOS/Fedora各种源(EPEL、Remi、RPMForge、RPMFusion)配置

    最新文章:Virson’s Blog CentOS默认自带CentOS-Base.repo源,但官方源中去除了很多有版权争议的软件,而且安装的软件也不是最新的稳定版.Fedora自带的源中也找不到很多 ...

  4. 修改FreeBSD启动菜单停留时间

    原文:http://blog.chinaunix.net/uid-21782158-id-11006.html 分类: 两种情况: 一.启动时出现菜单的时候要停的10秒 方法: 编辑/boot/loa ...

  5. 服务设计模式一:Web服务概述

    目录 1. Web服务是什么 2.为什么要使用Web服务 3.Web服务考虑的因素和替代方案 4.SOA是什么 Web服务是什么? 所谓服务,通俗的理解就是别人帮你做一些事情,比如说,腰酸背痛了,找个 ...

  6. Oracle中的数据类型

    数据类型 数据类型是在设计表结构中需要定义的,选择适当的数据类型可以节省存储空间,提高运算效率. Oracle数据类型主要包括 1.字符型 适合保存字符串类型的数据,如姓名.地址.简介等等. 如:ch ...

  7. JMeter学习-010-JMeter 配置元件实例之 - CSV Data Set Config 参数化配置

    众所周知,在进行接口测试的过程中,需要创建不同的场景(不同条件的输入,来验证不同的入参的返回结果).因而,在日常的自动化接口监控或商品监控等线上监控过程中,需要配置大量的入参来监控接口的返回是否正确. ...

  8. The tag 'DataGridTextColumn' does not exist in XML namespace ....

    错误 10 The tag 'DataGridTextColumn' does not exist in XML namespace 'http://schemas.microsoft.com/win ...

  9. Java 集合的基本用法

    package jaxpsax; import java.util.Comparator; import java.util.HashSet; import java.util.Iterator; i ...

  10. VMware下安装虚拟机Ubuntu14.04 Server设置桥接方式

    我本地的采用的上网方式的拨号上网,IP段是一公网下的通过路由设置的局域网,网段182.18.1.* 本地连接包含以下: 其中无线上网卡的.WMware桥接是自定义的局域网IP段:192.168.253 ...