数据库系统概论,SQLServer之视图篇

定义:

视图是从一张或多张基本表(或视图)导出的表。与基本表不一样,数据库只会存放视图的概念,而视图中的数据只怕存放在本来基本表中。视图是基本表的投射,即使基本表爆发了转变,则从视图中查询出的数目也会相应地爆发转移。视图的操作首要含有以下内容:

SQL概述

1 视图介绍

       
 视图是从二个还是多少个基本表(或视图)导出的表。它与基本表差别,是1个虚表。数据库中只存放视图的定义,而不存在视图对应的数码,那一个数据如故存放在原本的基本表中。所以一旦基本表中的数据发生变化,从视图中询问的多寡也就随即改变了。从那个意义上讲,视图就像3个窗口,透过它可以见到数据库中温馨感兴趣的数码及其变动。

1.1 视图的概述

    
 视图是从3个依旧多少个表导出的,它的一言一动与表格外相像,但视图是1个虚拟表,在视图中可以运用SELECT语句询问数据,以及利用insert、update和delete语句修改记录,对于视图的操作最后转化为对基本数据表的操作。视图不仅能够便宜操作,而且可以保证数据库系统的安全性。

 视图一经定义便蕴藏在数据库中,与其相呼应的数量并没有像表数据那样在数据库中在储存一份,通过视图看到的多少只是存放在基本表中的数据。可以对其展开增删该查,通过视图对数码修改,基本表数据也相应变化,反之亦然。

视图(View)是从1个或多少个表(或视图)导出的表。视图与表(有时为与视图差别,也称表为基本表——Base
Table)不相同,视图是一个虚表,即视图所对应的数据不举行实际存储,数据库中只存储视图的定义,在对视图的数码开展操作时,系统依据视图的概念去操作与视图相关联的基本表。

① 、定义视图

SQL的发生和发展

野史就略了,想打听就百度。近来,没有三个数据库系统可以扶助SQL标准的保有概念和特色。许多软件厂商对SQL基本命令集还开展了分歧水平的伸张和改动,又有何不可协理标准以外的某些功用特色。

1.2 使用视图的目标与利益

1.聚焦特定数据:使用户只可以看看和操作与他们关于的数目,进步了数据的安全性。
2.简化数据操作:使用户无需写复杂的查询语句就可对数码举行操作。
3.定制用户数据:使不同程度的用户能以不一样的法门看看差其余多寡。
4.集合分离数量:视图可以从品位和垂直方向上划分数据,但原数据库的布局保持不变。

操作:

sql语句用create
view命令建立视图,其貌似格式是:

SQL的特点

  1. 综合统一

    非关系模型(层次模型、网状模型)的数据语言一般都分为:

    1. 格局数据定义语言(DDL):用于定义形式
    2. 外格局数据定义语言(外格局DDL或子情势DDL):概念外格局
    3. 数据存储有关的描述语言(DSDL):概念内情势
    4. 数据操纵语言(DML):进展数据的存取和惩治

    SQL集数据定义语言、数据操纵语言、数据控制语言的成效于一体,包涵以下一五种操作须要:

    • 概念和修改、删除关系格局,定义和删除视图,插入数据,建立数据库。
    • 对数据库中的数据进行询问和翻新。
    • 数据库安全性、完整性控制,以及事务处理。
    • 嵌入式SQL和动态SQL定义。
  2. 惊人非进程化

    用SQL语言举办多少操作时,只要提议“做什么”而无须指明“如何做”,减轻了用户承担,有利于增加数据独立性。

  3. 面向集合的操作方法

    操作对象为一条记下,SQL拔取聚合操作办法,不仅操作对象、查找结果可以是元组的成团,而且五遍插入、删除、更新操作的目标也得以是元组的集合。

  4. 以同等种语法结构提供各个运用格局

    SQL既是独自的语言,又是嵌入式语言。用户能够在极限直接键入SQL命令,也足以松开到高级语言程序中,语法基本上是一样的,提供了极大的百发百中与方便性。

  5. 言语精练,易学易用

    主干功能只用了八个动词,如下表:

SQL功能 动词
数据查询 SELECT
数据定义 CREATE,DROP,ALTER
数据操纵 INSERT,UPDATE,DELETE
数据控制 GRANT,REMOVE

2 创立视图

语法:

 [ with check option ] –强制所有通过是同修改的数据,都要满足select语句中指定的条件

select查询语句
as
[ with encryption ] –用于加密视图的定义,用户只能查看不能修改。
[ (列名表) ]
create view 视图

先成立2个学员表

use marvel_db;
–创建一个学生表
create table stuTable(
    id int identity(1,1)primary key,–id 主键,自增
    name varchar(20),
    gender char(2),
    age int,
)
–往表中插入数据
insert into stuTable (name,gender,age)
values
    (‘刘邦’,’男’,23),
    (‘项羽’,’男’,22),
    (‘韩信’,’男’,21); 

insert into stuTable(name,gender,age) values(‘萧何’,’男’,24)  

创立视图

–创建视图
if (exists (select * from sys.objects where name = ‘stu_view’))
    drop view stu_view
go
–stu_view()不实用参数,默认为基础表中的列名称
–注意 create view 必须是批处理里面的语句
create view stu_view 
as 
select name,age from stuTable where age>20;
go
–执行视图

select * from stu_view;  

查询结果:

997755.com澳门葡京 1

1.

create
view <>[(<列名>[,<列名>]…)]

SQL的基本概念

数据库三级情势社团,其中外形式包含若干视图(View)和部分基本表(base
table),数据库情势包括若干基本表,内格局包罗若干储存文件(stored
file)。下图为SQL对关周全据库情势的支撑:

997755.com澳门葡京 2

db关系格局图

3 修改视图

 

go
alter view stu_view 
as
select * from stuTable where age>22;
go

select * from stu_view  

突显结果:

997755.com澳门葡京 3

数据库系统概论,SQLServer之视图篇。WITH check OPTION
表示对视图进行UPDATE、INSE翼虎T、delete操作时要确保更新、删除、或插队的行满意视图定义中的谓词条件
由于视图是不实际存储数据的虚表,因而对视图的立异最后要转换为对基本表的更新。所以为了预防用户对数据有意无意的操作,可在概念视图时添加
with check option

as
<子查询>

数码定义

SQL的数目定义语句表:

操作对象 创建 删除 修改
模式 CREATE SCHEMA DROP SCHEMA
CREATE TABLE DROP TABLE ALTER TABLE
视图 CREATE VIEW DROP VIEW
索引 CREATE INDEX DROP INDEX ALTER INDEX

二个关周密据库管理种类的实例中得以创设五个数据库,七个数据库中可以成立七个形式,多个格局下一般包罗多少个表、视图和目录等数据库对象。

4 删除视图

 

go
–语法
drop view view_name1,view_name2,……,view_nameN;
–该语句可以同时删除多个视图,只要在删除各视图名称之间用逗号分隔即可。

譬如:删除视图 stu_view

–语法
drop view stu_view;

–该语句可以同时删除多个视图,只要在删除各视图名称之间用逗号分隔即可。  

5 通过视图管理表中的数据

(1).通过视图向基本表中插入数据

注意:

1.可透过视图向基表中插入数据,但插入的数目实际上存放在基表中,而不是存放在视图中。

2.只要视图引用了五个表,使用insert语句插入的列必须属于同一个表。

3.若开立视图时定义了“with check
option”选项,则动用视图向基表中插入数据时,必须保证插入后的数量满意定义视图的范围标准。

–(1).通过视图向基本表中插入数据
go
create view stu_insert_view(编号,姓名,性别,年龄)
as
select id,name,gender,age from stuTable;
go
select * from stuTable;
—插入一条数据
insert into stu_insert_view values(‘孙权’,’男’,34);
—-查看插入记录之后表中的内容。

select * from stuTable;  

来得结果:

997755.com澳门葡京 4

(2).通过视图修改基本表的数量

–查看修改之前的数据
select * from stuTable;  

彰显结果:

997755.com澳门葡京 5

–修改数据
update stu_insert_view set 年龄=30 where 姓名=’刘邦’;
–查看修改后的数据

select * from stuTable;  

结果呈现:

997755.com澳门葡京 6

(3).通过视图删除基本表的数据

注意:

1.要去除的数目必须带有在视图的结果集中。

2.倘若视图引用了八个表时,不可能用delete命令删除数据。

语法

–语法
delete stu_insert_view where condition;  

除去以前:

997755.com澳门葡京 7

删除:

–例子
delete stu_insert_view where 姓名 =’刘邦’;
select * from stu_insert_view;

select * from stuTable;  

来得结果:

997755.com澳门葡京 8

2
如果视图定义中有如下子句则不大概创新

[with
check option];

模式的概念与删除

  1. 概念方式:方式语句如下:

    CREATE SCHEMA<模式名>AUTHORIZATION<用户名>[<表定义子句>|<视图定义子句>|<授权定义子句>];

    假如没有点有名的模特式名,那么带有为用户名。

  2. 去除格局:方式语句如下:

    DROP SCHEMA <模式名><CASCADE|RESIRICT>;

    里面CASCADE和REST牧马人ICT两者必选其一。采用CASCADE(级联),表示在剔除方式的还要把该情势中享有的数据库对象全部刨除;采用RESI路虎极光ICT(限制),表示只要该方式中已经定义了下属的数据库对象(如表、视图等),则拒绝该删除语句的推行。

6总结

1.利用情状:

1.时时利用的查询,或较复杂的一路查询相应创立视图,那是会优化质量的
2.关系到权力管理方面,比如某表中的部分字段含有机密信息,不该让低权限的用户访问到的气象,那时候给这几个用户提供1个契合他们权限的视图,供他们阅读本人的数量就行了。
2.视图与表的分化:

997755.com澳门葡京,1.视图是早就编译好的SQL语句,是依据SQL语句的结果集的可视化表,而表不是;
2.视图(除过索引视图)没有实际的情理记录,而基本表有;
3.意味内容,视图是窗口;
4.表占物理空间,而视图不占物理空间,视图只是逻辑概念的存在;
5.视图是查看数据表的一种办法,可以查询数据表中某个字段构成的数额,只是一些SQL语句的集纳。从安全角度说,视图可避防备用户接触数据表,从而不知表结构;
6.表属于全局方式的表,是实表;视图数据局地方式的表,是虚表;
7.视图的成立和删除只影响视图本身,不影响对应的基本表。

 

转载自:

● 分组 使用group by 和 Having

内部,子程序可以是不管三七二十一复杂的select语句,但平日不包涵order
by子句和distinct短语。with check
option表示对视图进行update、insert、delete操作时要确保更新、插入、删除的行满意视图定义中的谓词条件(即子查询中的条件表明式)。

基本表的概念、删除与修改

  1. 概念基本表

    CREATE TABLE <表名> (<列名><数据类型>[列级完整性约束条件][,<列名><数据类型>[列级完整性约束条件]]...[,<表级完整性约束条件>]);

    事例:建立一个”课程“表Cource

    CREATE TABLE Cource
        (Cno CHAR(4) PRIMARY KEY,       /*列级完整性约束条件,Cno是主码*/
        Cname CHAR(40) NOT NULL,        /*Cname不能取空值*/
        Cpo CHAR(4),
        Credit SMALLINT,
        FOREIGN KEY (Cpno) REFERENCES Cource (Cno)
            /*表级完整性约束条件,Cpno是外码,被参照表是Cource,被参照列是Cno*/
        );
    

    专注:参照表和被参照表可以是同多少个表。

  2. 数据类型

    下表给出了有的SQL标准扶助的数据类型:

数据类型 含义
CHAR(n),CHARACTER(n) 长度为n的定长字符串
VARCHAR(n) 最大长度为n的变长字符串
INT,INTEGER 长整数(4字节)
SMALLINT 短整数(2字节)
BIGINT 大整数(8字节)
FLOAT(n) 可选精度的浮点数,精度至少为n位
BOOLEAN 逻辑布尔量
DATE 日期,包含年月日,格式为YYYY-MM-DD
TIME 时间,包含时分秒,格式为HH:MM:SS
  1. 方式与表

    概念基本表一般有三种格局定义它所属的格局:

    1. 在表名中鲜明给出情势名

      CREATE TABLE "S-T".Student(...); /*Student所属模式是S-T*/

    2. 在创建形式语句中并且创立表

    3. 设置所属的情势,那样在开创表时声明中不要给出方式名

  2. 修改基本表

    格式为:

    ALTER TABLE <表名>
    [ADD [COLUMN] <新列名><数据类型> [完整性约束]]
    [ADD <表级完整性约束>]
    [DROP [COLUMN] <列名> [CASCADE|RESTRICT]]
    [DROP CONSTRAINT <完整性约束> [RESTRICT|CASCADE]]
    [ALTER COLUMN <列名><数据类型>];
    
  3. 删除基本表

    格式为:

    DROP TABLE <表名> [RESTRICT|CASCADE];
    

    若采纳REST奔驰M级ICT,则该表的去除是有限量条件的。

    若选拔CASCADE,则该表的删减没有界定条件。在剔除基本表的同时。相关的借助对象,例如视图,都将被同步删除。

● 联结

构成视图的性质列名或然全体回顾可能全部钦定,没有第3种选拔。即使不难了视图的逐条属性列名,则带有视图的性质列名是由子查询select语句中的目的列名的字段组成的。然而有以下两种景况须求必须内定视图的具有列名:

目录的树立与删除

当表的数据量相比较大时,查询操作会比较耗时。建立目录可以加快查询速度。数据库索引有各体系型,常见索引包含文件上的目录、B+树索引、散列(HASH)索引、位图索引等。(通晓一下)

  • 逐一文件上的目录是对准按钦赐属性值升序或降序存储的关系,在该属性上建立一个顺序索引文件,索引文件由属性值和呼应的元组指针组成。
  • B+树索引是将索引属性协会成B+树情势,B+树的叶结点为属性值和呼应的元组指针。此索引具有动态平衡的长处。
  • 散列索引是手无寸铁若干个桶,将索引属性依据其散列函数值映射到相应桶中,桶中存放索引属性值和相应的元组指针。查找速度快。
  • 位图索引是用位向量记录索引属性中大概出现的值,每一个位向量对应一个大概值。
  1. 创立目录

    格式为:

    CREATE [UNIQUE] [CLUSTER] INDEX <索引名>
    ON <表名>(<列名> [<次序>] [,<列名> [<次序>]]...);
    

    表名是要树立的基本表的名字。索引可以创立在该表的一列或多列上,各列名之间用逗号隔开。每一种列名后可以用次序内定索引值得排列顺序,可选ASC(升序)或DESC(降序),专擅认同值是升序。

    UNIQUE表明此索引的每2个索引值只对应唯一的多少记录。

    CLUSTER意味着要树立的目录是聚簇索引

  2. 修改索引

    格式为:

    ALTER INDEX <旧索引名> RENAME TO <新索引名>;
    
  3. 剔除索引

    格式为:

    DROP INDEX <索引名>;
    

    除去索引时,系统会同时从数量字典中删去有关该索引的讲述。

● 子查询

(1)有个别目的不是仅仅的属性名,而是聚集函数或列表明式

数据字典

多少字典是关周详据库管理种类之中的一组系统表,记录了数据库全部的定义信息。关全面据库管理种类在履行SQL的多少定义语句时,实际上就是在更新数据字典表中的相应信息。

● 并集

(2)多表连接时选出了多少个同名列作为视图的字段

数量查询(重难题)

格式为:

SELECT [ALL|DISTINCT] <目标列表达式> [,<目标列表达式>] ...
FROM <表名或视图名> [,<表名或视图名>...]|(<SELECT语句>)[AS] <别名>
[WHERE <条件表达式>]
[GROUP BY <列名1> [HAVING<条件表达式>]]
[ORDER BY <列名2> [ASC|DESC]];

含义是:根据WHERE子句的标准化表明式从FROM子句钦赐的基本表中找出满意条件的元组,再按SELECT子句中的目的列表明式选出元组中的属性值形成结果表。即便有GROUP BY子句,则将结果按列名1进展分组,该属性列值相等的元组为2个组。如若有ORDER BY子句,则结果表还要按列名2的值得升序或降序排序。

注意:索引的ASC|DESC是手无寸铁目的时方便查询的,而查询的ORDER BYASC|DESC是对结果表展开的五遍排序。

● 聚集函数 MAX MIN COUNT AVG

(3)需求在视图中为有个别列启用新的更合适的名字

单表查询

  1. 选料表中的几何列

    1. 查询内定列

      SELECT Sno,Sname
      FROM Student;
      
    2. 查询全体列

      SELECT *
      FROM Student;
      
    3. 查询经过测算的值

      对象列表明式不仅可以是表中的属性列,还是能是表明式

      SELECT Sname,2017-Sage
      FROM Student;
      
  2. 分选表中的好多元组

    1. 打消取值重复的行

      SELECT DISTINCT Sno
      FROM SC;
      
    2. 询问满足条件的元组

查询条件 谓词
比较 =, >, <, >=, <=, !=, <>, !>, !< ; NOT+上述比较运算符
确定范围 BETWEEN AND, NOT BETWEEN AND
确定集合 IN, NOT IN
字符匹配 LIKE, NOT LIKE
空值 IS NULL, IS NOT NULL
多重条件 AND, OR, NOT
  1. 比较大小

    SELECT Sname
    FROM Student
    WHERE Sdept='CS';
    
  2. 规定限制

    SELECT Sname,Sdept,Sage
    FROM Student
    WHERE Sage BETWEEN 20 AND 25;
    
  3. 鲜明集合

    SELECT Sname,Ssex
    FROM Student
    WHERE Sdept IN ('CS','MA','IS');
    
  4. 字符匹配

    [NOT] LIKE '<匹配串>' [ESCAPE '<换码字符>']
    

    匹配串可以是一个完整的字符串,也可以包罗通配符%和_(模糊查询)。

    • %代表私自长度的字符串
    • _下划线代表私下单个字符
    • []点名范围( [a-f] 或 [abcdef] )中的任何单个字符

    SELECT *
    FROM Student
    WHERE Sname LIKE '刘%';
    

    假诺用户要查询的字符串本身就隐含通配符,就要采取ESCAPE '换码字符'短语对通配符进行转义了。

    SELECT Cno,Ccredit
    FROM Student
    WHERE Cname LIKE 'DB\_Design' ESCAPE '\';
    
  5. 涉嫌空值的询问

    SELECT Sno,Cno
    FROM SC
    WHERE Grade IS NULL     /*不能写 = null*/
    
  6. 多重规范查询

    SELECT Sname
    FROM Student
    WHERE Sdept='CS' AND Sage<20;
    

  1. ORDER BY 子句

    SELECT Sno,Grade
    FROM SC
    WHERE Cno='3'
    ORDER BY Grade DESC;
    

    对于空值,排序时浮现的主次由现实系统落成来决定。

  2. 集结函数

    SQL提供了诸多成团函数,主要有:

函数名 说明
COUNT(*) 统计元组个数
COUNT( [DISTINCT/ALL] <列名> ) 统计一列中值的个数
SUM( [DISTINCT/ALL] <列名> ) 计算一列值的总和(必须是数值型)
AVG( [DISTINCT/ALL] <列名> ) 计算一列值得平均值(数值型)
MAX( [DISTINCT/ALL] <列名> ) 求一列值中的最大值
MIN( [DISTINCT/ALL] <列名> ) 求一列值中的最小值

当聚集函数遭受空值时,除COUNT(*)外,都跳过空值而只处理非空值。

注意:WHERE子句是不可以用聚集函数作为基准表明式的。聚集函数只可以用于SELECT子句和GROUP BY中的HAVING子句。

  1. GROUP BY 子句
    对查询结果分组的目标是为了细化聚集函数的法力对象。即使未对查询结果分组,聚集函数将功用于一体查询结果(毫无实际意义)。分组后聚集函数将成效于每二个组,即每三个组都有二个函数值。用GROUP
    BY子句后,SELECT中的属性列只好有标签属性(就是GROUP
    BY子句后跟的属性列)和聚集函数。

● DISTINCT

比如,创造建立“IS”系学生的视图:

老是查询

若二个询问同时提到八个以上的表,则称为连接查询。

  1. 等值与非等值连接查询
    总是查询的WHERE子句中用来连接五个表的尺度称为老是条件接连谓词。比较运算符有=、>、<、>=、<=、!=或<>等。当连接运算符为=时,成为等值连接。使用其他运算符称为非等值连接。连接谓词中的列名称为连接字段。连接条件中的各连接字段类型必须是相比的,但名字不必千篇一律。对于两表或多表中名字唯一的性质列前并非加前缀,但一样属性名的引用必须抬高表名前缀。如:

select Student.Sno,Sname,Sage
from Student,SC
where Student.Sno=SC.Sno  /*Sno属性列重名,引用时加上表名前缀防止产生歧义*/
  1. 自己连接
    连年操作还足以时一个表与其本人进行连接,称为表的自我连接。当然,自己连接中要为同表取七个别名,二个是FILacrosseST,另一个是SECOND(并从未严厉的命名必要,能分别两表即可)。
  2. 外连接
    在平日的延续操作中,只有满意条件的元组才能看做结果输出。有时大家想把某表的悬浮元组保存在结果关系中,而在另多少个表中的习性上填控制NULL,那时急需用外接连。左外连接列出左边关系中具备的元组,右外连接列出左侧关系中有着的元组。全外连接非但重返左表中不相符连接条件单符合查询条件的数码行,还回去表中不符合连接条件单符合查询条件的数额行,实际上就是左外连接和右外连接的数学合集(去掉重复),即全外连接=左外连接
    UNION 右外接连。
    外连接格式为:

/*a,b,c,d均是属性列,A,B是表*/
/*下列代码依次对应左外连接右外连接和全连接,其中的outer可以缺省*/
select A.d,a,b,c
from A left/right/full [outer] join B on (A.d=B.d);

● 导出列

create
view  IS_student

嵌套查询

在SQL语言中,多个SELECT-FROM-WHERE语句称为一个查询块。将三个查询块嵌套在另多少个查询块的WHERE子句或HAVING短语的尺码中的查询称为嵌套查询
留神:子查询的SELECT语句中不可以应用O昂科拉DE逍客 BY子句。

  1. 包含IN谓词的子查询
    子查询的询问条件不借助于于父查询,称为不相干询问。借使实查询的查询条件着重于父查询,那类子查询称为相关子查询,整个查询语句称为相关嵌套查询。
  2. 包括相比较运算符的子查询
    求解相关子查询不能像求解不相关子查询同一两次将子查询求解出来,然后求解父查询,内层查询由于与外层查询有关,由此必须反复求值。
  3. 包涵ANY或ALL谓词的子查询
    子查询再次回到单值时可以用相比较运算符,但回来多值时要用比较运算符+ANY或ALL谓词修饰符。
  4. 带有EXISTS谓词的子查询
    带有EXISTS谓词的子查询不回去任何数据,只爆发true或false。
    (那里缺一块最难的一对,因为作者近来在用平板写博文没有LaTex数学公式手册,且不明白简书是还是不是帮忙公式,故日后再做立异)

举例子:
因为视图的更新最后会映射到基本表的翻新,不过视图中的字段或许数据库中一向不(通过汇聚函数从基本表拿到的字段),那样立异操作就会13分。

as

聚拢查询

SELECT语句的询问结果是元组的聚合,所以五个SELECT语句的结果可进展联谊操作。集合的操作首要不外乎并操作UNION、交操作INTE帕杰罗SECT和差操作EXCEPT。
留意:参预集合操作的各查询结果的列数必须一致;对应项的数据类型也必须一律。集合查询语句放在五个查询块之间。

评价:

select
Sno,Sname,Sage

据悉派生表的询问

子查询不仅可以出现在WHERE子句中,还能出现在FROM子句中,那时子查询生成的临时派生表称为主查询的询问对象。经过FROM子句生成派生表时,AS关键字可以简简单单,但不或者不为派生表关系内定3个别名,对于基本表,别名是可选项。

优点:

from
student

SELECT语句的相似格式

简化用户操作

where
Sdept=’IS’;

数据更新

对重构数据库提供了自然水准上的逻辑独立性

该实例中,省略了IS_student的列名,隐含了由子查询中select子句中的多少个列名组成(即唯有Sno,Sname,Sage)。这时候大家可以透过IS_student视图来询问IS系学生的新闻了,如:select
* from
IS_student;//(只会来得Sno,Sname,Sage七个信息,因为创立视图时简短了列名,所以默许字段就是select语句中的字段)。

插入数据

格式为:

INSERT
INTO 表名 属性列1,属性列2,...
VALUES 常量1,常量2,...;
/*有几个属性列对应赋几个常量值*/
/*赋值时字符串常数要用单引号或双引号括起来*/

安全性

一经想创制那样1个音信连串学生的视图,要求开展改动和插入操作时仍须有限支撑该视图唯有新闻系的学生,则足以这么:

修改数据

格式为:

UPDATE 表名
SET 属性列1=值或表达式,属性列2=值或表达式,...
[WHERE 条件];
/*如果省略where子句,说明要修改表中的所有元组(set后面跟的属性列的值全部被修改)*/

缺点:

create
view  IS_student

剔除数据

格式为:

DELETE
FROM 表名
[WHERE 条件];
/*delete删除的是表中的数据,不是关于表的定义*/

修改限制

as

空值的处理

所谓空值就是“不知底”或“不存在”或“无意义”的值。SQL语言中貌似如下景况取空值:

  • 该属性应该有一个值但近年来不知道它的具体值。
  • 该属性不应当有值。
  • 由于某种原因不便宜填写。

品质难题,因为视图的操作会映射到基本表,而视图定义的繁杂会招致查询操作的繁杂。

select
Sno,Sname,Sage

视图

视图是从贰个或多少个基本表(或视图)导出的表。它是2个虚表。数据库中只存放视图的定义,而不存放视图对应的数额,那么些数量仍存放在原本的基本表中。

from
student

概念视图

where
Sdept=’IS’

树立视图

格式为:

CREATE VIEW 视图名 列名1,列名2,...
AS 子查询
[WITH CHECK OPTION]
/*其中子查询可以是任意的select语句*/

WITH CHECK OPTION代表对视图举办UPDATE、INSERT和DELETE操作时要确保更新、插入或删除的行满意视图定义中的谓词条件(即子查询中的条件表明式)。注意:组成视图的属性列要么全部不难要么全体点名,出现下列二种境况时务必了然指定组成视图的享有列名:

  1. 有些目的列不是单纯的属性名,而是聚集函数或列表达式;
  2. 多表连接时选出了多少个同名列作为视图的字段;
  3. 急需在视图中为有些列启用新的更合适的名字。
    关周全据库管理体系实施create view说话的结果只是把视图的定义存入数据字典,并不实施其中的select语句。
    若3个视图是从但个着力表导出的,并且只是去掉了基本表的某个行和有些列,但保留了主码,则称那类视图为行列子集视图。注意:行列子集视图是可以开展创新操作的。
    概念基本表时,表中只存放基本数据,派生出的数码一般不存储。把那一个派生属性列称为虚拟列。
    只要用带有集结函数和GROUP
    BY子句
    的询问来定义视图,那种视图称为分组视图

with
check
option;//保证对该视图进行修改操作时,DBMS会自动添加Sdept=”IS”条件。

去除视图

格式为:

DROP VIEW 视图名 [CASCADE]
/*cascade表示级联删除*/

再比如,成立三个反映学生出生年份的视图:

询问视图

关周密据库管理连串执行对视图的询问时,首先举办实用检查,检查查询中涉及的表或视图是不是留存。如若存在,则从数量字典中取出视图的概念,把定义中的子查询和用户的查询结合起来,转换来等价的对基本表的询问,然后再实践改进了的查询。这一经过称为视图消解
只顾:视图一旦定义,其定义将永远保存在多少字典中,之后的保有查询都足以直接选择该视图。而派生表只是在讲话执行时暂且定义,语句执行后该定义即被删除。

create
view birth_student(Sno,Sname,Sbirth)

更新视图

只允许行列子集视图举办更新。对视图的翻新最后要转换到对基本表的创新。
对此视图的翻新,不一样的系列在落到实处形式上有差距,其中DB2规定:

  1. 若视图是由多少个以上基本表导出的,则此视图不相同意更新;
  2. 若视图的字段来自字段表明式或常数,则只同意对此视图执行DELETE操作
  3. 若视图的字段来自聚集函数,则此视图不容许更新;
  4. 若视图概念中带有GROUP BY子句,则此视图不允许更新;
  5. 若视图概念中富含DISTINCT短语,则此视图不容许更新;
  6. 若视图定义中有嵌套查询,并且内层查询的FROM子句中关系的表也是导出该视图的基本表,则此视图不允许更新;
  7. 一个不容许更新的视图上定义的视图也不容许更新。

as

视图的意义

  1. 视图可以简化用户的操作
  2. 视图使用户能以多种角度看待统一数据
  3. 视图对重构数据库提供了一定水准的逻辑独立性
  4. 视图可以对秘密数据提供安全保安
  5. 适宜使用视图可以更分明地表达查询

迎接访问作者的私房博客

select
Sno,Sname,2017-Sage

from
student;

在select子句中,还是能利用带有聚集函数group
by子句的询问来定义视图,那种视图称为“分组视图”。例如,创立学生的学号和他的平均战绩的视图:

create
view SN_AV(Sno,Gave)

as

select
Sno,AVG(grade)

from SC
group by Sno;

因为as子句中select语句的平均成绩是经过集合函数得到的,所以在create
veiw语句中务必定义视图SN_AV的一一属性列名,而无法几乎。

② 、删除视图

剔除视图的话语是:drop
view
<视图名>[cascade];该语句会将视图的概念从数量字典中剔除。假设该视图还导出了任何视图,则采用cascade级联删除语句,可以将该视图以及由该视图导出的保有视图一起删除。

叁 、查询视图

视图的询问和对基本表的询问同一,例如,可以查询birth_student视图中的全体新闻:

select
* from birth_student;

再比如,查询SN_AV视图中,平均值大于等于90的学习者号和平均分:

select
* from SN_AV where Gave>90;

肆 、更新视图

革新视图的动作最后是要达成到具体的表上的,为了幸免用户通过视图对数据开展翻新时,有意或下意识地对不属于视图范围之内的基本表数据开展改动,在概念视图时得以添加with
check option子句。

4.1
插入语句

例如,将IS_student视图中的学号为二零零零1215的学生姓名改为“张翼德”:

update
IS_student

set
Sname=”张飞”

where
Sno=”20021215″;

在IS_student视图中添加3个新的学生记录,如下:

insert

into
IS_student

values(“20021218″,”赵子龙”,20);

如上语句兑换来更新表的话语是:

insert

into
student(Sno,Sname,Sage,Sdept)

values(“20021218″,”赵子龙”,20,”IS”);

4.2
删除语句

例如,删除IS_student表中的学号为二〇〇一1215的笔录:

delete

from
IS_student

where
Sno=”20021215″;

4.3
更新语句

例如,更改IS_student表中的学号为二〇〇二1215的学童姓名为”关云长“:

update
IS_student

set
Sname=”关羽”

where
Sno=”20021215″;

视图的功效重大有以下几点:

1)视图对重构数据库提供了自然的逻辑独立性

数码的情理独立性是指用户的应用程序不应依赖于数据库的物理结构;逻辑独立性是指当数据库重构造时,如增添新的关联或对原来关系增加新的字段等,用户的应用程序不应受到震慑。在关周到据库中,重构数据库最广泛的是将1个基本表”垂直“地分成多个基本表,例如将学生关系:

student(Sno,Sname,Ssex,Sage,Sdept)

分为SX(Sno,Sname,Ssex)和SY(Sno,Sage,Sdept)七个涉及,那是student表是SY和SX三个表自然连接的结果。借使创制五个student视图:

create
view student(Sno,Sname,Ssex,Sage,Sdept)

as

select
SX.Sno,SX.Sname,SX.Ssex,SY.sage,SY.Sdept

from
SX,SY

where
SX.Sno=SY.Sno;

如此就算数据库的逻辑结构变了(变为SX和SY多个表),不过应用程序不必改变。

2)视图可以对地下数据提供安全维护

有了视图机制,在筹划数据库应用系列时,可以对差别用户定义不一样的视图,使得全数机密性的多寡不相会世在不应有看到那几个数据的用户视图上。

 

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website