数据库管理系统——SQL语言(数据更新)

摘要:在上一个章节数据库管理系统——SQL(数据查询)-CSDN博客中,我们学习了SQL的数据查询,本篇博客将继续讲述SQL的数据更新和视图

目录

一、数据更新

1.1插入数据

1.2修改数据

1.3删除数据

二、视图

2.1定义视图 

2.2查询视图

2.3更新视图

三、空值的处理

小结


一、数据更新

数据更新即在创建表完成以后,对表中内容的更新操作,主要包括:插入数据修改数据删除数据

1.1插入数据

插入一个新的元组

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

           VALUES (<常量1> [,<常量2>]… );

其中:

每个属性都需给出指定值

没有指定值的属性会为NULL

当属性字段的约束为NOT NULL,此时指定属性为NULL会报错

例1:将一个新学生元组(学号:20180009,姓名:陈冬,性别:男,出生日期:2000-5-22,主修专业:信息管理与信息系统)插入到Student表中。

语法:INSERT INTO Student (Sno,Sname,Ssex,Smajor,Sbirthdate)

           VALUES ('20180009', '陈冬', '','信息管理与信息系统', '2000-5-22’);

例2:将学生张成民的信息插入到Student表中

语法:INSERT INTO Student

           VALUES ('20180008', '张成民', '','2000-4-15','计算机科学与技术');


插入子查询结果

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

           子查询;

例1:对每一个专业,求学生表Student学生的平均年龄,并把结果存入数据库表Smajor_age

语法:INSERT INTO Smajor_age(Smajor, Avg_age)

           SELECT Smajor,AVG(extract(year from current_date)-extract(year from Sbirthdate))

           FROM Student

           GROUP BY Smajor;  

1.2修改数据

语法:UPDATE <表名>

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

           [WHERE <条件> ] ;


修改某一个元组的值

例1:将学生20180001的出生日期改为2001318

语法:UPDATE Student

           SET Sbirthdate='2001-3-18'

           WHERE Sno='20180001';


修改多个元组的值

例1:2020年第1学期选修81002课程所有学生的成绩减少5

语法:UPDATE SC

           SET Grade= Grade-5

           WHERE Semester='20201' AND Cno='81002';


带子查询的修改语句

例1:将计算机科学与技术专业学生成绩置零

语法:UPDATE SC

           SET Grade=0

           WHERE Sno IN ( SELECT Sno

                                        FROM Student

                                        WHERE Smajor= '计算机科学与技术');

1.3删除数据

语法:DELETE FROM  <表名>

           [WHERE <条件>];


删除某一个元组的值

例1:删除学号为20180007的学生记录。

语法:DELETE FROM Student

           WHERE Sno='20180007';


删除多个元组的值

例1:删除所有的学生选课记录。

语法:DELETE FROM SC;


删除带子查询的语句

例1:删除计算机科学与技术专业所有学生的选课记录 

语法:DELETE FROM SC

           WHERE Sno IN ( SELECT Sno

                                        FROM Student

                                        WHERE Smajor= '计算机科学与技术' );

二、视图

视图的特点

  • 虚表,是从一个或几个基本表(或视图)导出的表
  • 只存放视图的定义,而不存放视图对应的数据
  • 基本表中的数据发生变化,从视图中查询出的数据也随之改变

视图的作用

1.视图能够对机密数据提供安全保护

例如:Student表涉及全校30个院系的学生数据

        可以在其上定义30个视图

        每个视图只包含一个院系的学生数据

        只允许每个院系的主任查询和修改本院系的学生视图

2.视图对重构数据库提供了一定程度的逻辑独立性

例如:学生关系Student(Sno,Sname,Ssex,Sbirthdate,Smajor) “垂直”地分成两个基本表:

        SX(Sno,Sname,Sbirthdate)       

        SY(Sno,Ssex,Smajor)

3.视图能够简化用户的操作

4.视图使用户能以多种角度看待同一数据

2.1定义视图 

建立视图语法:

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

        AS  <子查询>

        [WITH  CHECK  OPTION];

例:建立信息管理与信息系统专业学生的视图

语法:CREATE VIEW IS_Student

           AS

           SELECT Sno,Sname,Ssex,Sbirthdate, Smajor

           FROM Student

           WHERE Smajor='信息管理与信息系统’;


删除视图语法:

        DROP  VIEW  <视图名>[CASCADE];

例:删除视图S_AGE

语法:DROP VIEW S_AGE; 

2.2查询视图

例:在信息管理与信息系统专业学生的视图中,找出年龄小于等于20岁的学生(包括学生的学号和出生日期)

语法:SELECT Sno, Sbirthdate

           FROM IS_Student   #视图名

           WHERE (extract(year from current_date)-extract(year from Sbirthdate) )<=20;

2.3更新视图

通过视图来插入(INSERT)、删除(DELETE)和修改(UPDATE)数据。

例1:将信息管理与信息系统专业学生视图IS_Student中学号为“20180005”的学生姓名改为“刘新奇”

语法:UPDATE IS_Student

           SET Sname=‘刘新奇'

           WHERE Sno='20180005';

例2:删除信息管理与信息系统专业学生视图IS_Student中学号为“20180207”的记录

语法:DELETE FROM IS_Student

           WHERE Sno='20180207’;

三、空值的处理

空值是一个很特殊的值,含有不确定性。对关系运算带来特殊的问题,需要做特殊的处理。

一般有以下几种情况:

        ①该属性应该有一个值,但目前不知道它的具体值

        ②该属性不应该有值

        ③由于某种原因不便于填写


空值的判断(IS NULL/IS NOT NULL)

例:从Student表中找出漏填了数据的学生信息。

语法:SELECT *

           FROM Student

           WHERE Sname IS NULL OR Ssex IS NULL

                                                    OR Sbirthdate IS NULL

                                                    OR Smajor IS NULL;


空值的约束

在创建基本表时,如果属性定义(或者域定义)为 NOT NULL 约束,则该属性不能取空值。
主码的属性不能取空值
        如:SC表的主码是( Sno,Cno Sno Cno 都不能取空值。

        Student表的主码是Sno不能取空值


空值的算术运算、比较运算和逻辑运算

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

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

UNKNOWN后,传统的逻辑运算中二值(TRUEFALSE)逻辑就扩展成了三值逻辑(TRUE、FALSE、UNKNOWN)

小结

在本节内容中,我们学习了SQL的数据更新和视图,最后还讲解了一些关于空值NULL的处理,下一节我们将讲述SQL的存储过程和触发器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值