关系数据库标准语言SQL---数据更新、空值处理、视图

一、数据更新 

插入数据:1.插入元组 2.插入子查询结果(一次插入多个元组)

插入元组

INSERT

INTO <表名> [(<属性列1>[,<属性列2 >…)]   

VALUES (<常量1> [,<常量2>]… );  ##提供的值必须与INTO子句匹配

 into子句规则:

没有指定属性列:表示要插入的是一条完整的元组,且属性列属性与表定义中的顺序一致

eg:

    INSERT     INTO SC     VALUES (' 201215128 ',' 1 ');

指定部分属性列:插入的元组在其余属性列上取空值

eg:

    INSERT     INTO SC(Sno,Cno)     VALUES ('201215128 ',' 1 ');

插入子查询

 INSERT

INTO <表名>  [(<属性列1> [,<属性列2>…  )]

子查询;

子查询规则:

SELECT子句目标列必须与INTO子句匹配  1.值的个数  2.值的类型

eg :

INSERT

INTO  Dept_age(Sdept,Avg_age)        

      SELECT  Sdept,AVG(Sage)        

      FROM     Student     GROUP BY Sdept;

 

!!!注意!!!

执行插入语句时会检查所插元组是否破坏表上已定义的完整性规则:

实体完整性

参照完整性

用户定义的完整性 :1. NOT NULL约束  2. UNIQUE约束  3. 值域约束

 

修改数据

1. 修改指定表中满足WHERE子句条件的元组

2. SET子句给出<表达式>的值用于取代相应的属性列

3. 如果省略WHERE子句,表示要修改表中的所有元组

UPDATE  <表名>    

SET  <列名>=<表达式>[,<列名>=<表达式>]…    

[WHERE <条件>];

 

修改某一个元组的值

eg:UPDATE  Student          SET Sage=22          WHERE  Sno=' 201215121 ';

修改多个元组的值

eg:UPDATE  Student            SET Sage= Sage+3;

带子查询的修改语句

eg:UPDATE  SC    SET     Grade=0       WHERE  Sno  IN      (SELETE   Sno   FROM     Student      WHERE  Sdept= 'CS' );

 

!!!注意!!!

执行插入语句时会检查所插元组是否破坏表上已定义的完整性规则:

实体完整性

参照完整性

用户定义的完整性 :1. NOT NULL约束  2. UNIQUE约束  3. 值域约束

 

删除数据

删除指定表中满足WHERE子句条件的元组

DELETE        

FROM     <表名>      

[WHERE <条件>];      ##  1.指定要删除的元组   2. 缺省表示要删除表中的全部元组,表的定义仍在字典中

 

删除某一个元组的值

eg:DELETE          FROM Student          WHERE Sno= 201915158 ';

 删除多个元组的值

eg:DELETE         FROM SC;

带子查询的删除语句

eg:DELETE      FROM  SC       WHERE  Sno  IN     (SELETE  Sno       FROM   Student       WHERE  Sdept= 'js') ;

 

二、空值的处理

空值产生的原因:

1.该属性应该有一个值,但目前不知道它的具体值      ###未考试,属性成绩为空

2.该属性不应该有值     ###科目属性有的学生并未选取,值应该为空 

3.由于某种原因不便于填写   ###密码属性,出于保密为空

判断是否为空:

IS NULL、IS NOT NULL

eg:SELECT  *     FROM Student     WHERE Sname IS NULL OR Ssex IS NULL OR Sage IS NULL

约束条件:

1. 有NOT NULL约束条件的不能取空值

2. 加了UNIQUE限制的属性不能取空值

3. 码属性不能取空值

空值的运算规则:

1. 空值与另一个值(包括另一个空值)的算术运算的结果为空值

2.  空值与另一个值(包括另一个空值)的比较运算的结果为UNKNOWN。

3. 有UNKNOWN后,传统二值(TRUE,FALSE)逻辑就扩展成了三值逻辑

逻辑运算表:(T表示TRUE,F表示FALSE,U表示UNKNOWN)

    x       y

  x   AND   y

  x    OR     y

   NOT    x

    T      T

         T

         T

     F

    T      U

         U

         T

     F

    T      F

         F

         T

     F

    U     T

         U

         T

     U

    U     U

         U

         U

     U

    U     F

         F

         U

     U

    F     T

         F

         T

     T

    F     U

         F

         U

     T

    F     F

         F

         F

     T

 

三、视图

(创建时只保存视图定义,查询时按定义从相应基本表查出)

特点:

1. 虚表,是从一个或几个基本表(或视图)导出的表

2. 只存放视图的定义,不存放视图对应的数据

3. 基表中的数据发生变化,从视图中查询出的数据也随之改变

视图创建:

CREATE  VIEW

             <视图名>  [(<列名>  [,<列名>]…)]        

AS  <子查询>    ###可以是任意的SELECT语句

   [WITH  CHECK  OPTION]; ##对视图进行UPDATE、INSERT、DELETE操作时要其对应的行满足视图定义中的子查询中的条件表达式

 

视图的属性列名:

1.全部省略

  • 由子查询中SELECT目标列中的诸字段组成

2.明确指定

  • 某个目标列是聚集函数或列表达式
  • 多表连接时选出了几个同名列作为视图的字段
  • 需要在视图中为某个列启用新的更合适的名字

eg:建立信息系学生的视图,并要求进行修改和插入操作时仍需保证该视图只有信息系的学生 。

CREATE VIEW IS_Student        

AS        

SELECT Sno,Sname,Sage        

FROM  Student        

WHERE  Sdept= 'IS' 

WITH CHECK OPTION;  ###对该视图进行插入、修改和删除操作时,RDBMS会自动加上Sdept='IS'的条件

删除视图:

DROP  VIEW  <视图名>[CASCADE];      ##CASCADE级联删除语句,把该视图和由它导出的所有视图一起删除  

查询视图:

用户角度:查询视图与查询基本表相同

关系数据库管理系统角度:

使用视图消解法进行语义转化   1.进行有效性检查   2.将视图查询语句转换成等价的对基本表的查询    3.执行修正后的查询对基本表查询

更新视图(与基本表语法一致)

一些视图是不可更新的,因为对这些视图的更新不能唯一地有意义地转换(视图消解法)成对相应基本表的更新。

视图更新限制 :

  • 若视图是由两个以上基本表导出的,则此视图不允许更新。
  • 若视图的字段来自字段表达式或常数,则不允许对此视图执行INSERT和UPDATE操作,但允许执行DELETE操作。
  • 若视图的字段来自聚集函数(sum、count等),则此视图不允许更新。
  • 若视图定义中含有GROUP BY子句,则此视图不允许更新。
  • 若视图定义中含有DISTINCT短语,则此视图不允许更新。
  • 若视图定义中有嵌套查询,并且内层查询的FROM子句中涉及的表也是导出该视图的基本表,则此视图不允许更新。
  • 一个不允许更新的视图上定义的视图也不允许更新。

视图的作用

  1. 视图能够简化用户的操作
  2. 视图使用户能以多种角度看待同一数据
  3. 视图对重构数据库提供了一定程度的逻辑独立性
  4. 视图能够对机密数据提供安全保护
  5. 适当的利用视图可以更清晰的表达查询
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

What’smean

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值