一、数据更新
两种插入数据方式:
(1)插入元组:
格式:
insert
into 表名 属性列
values 属性值
into子句:
(1)指定要插入数据的表名及属性列。
(2)属性列大的顺序可与表定义中的顺序不一致
(3)没有指定属性列:表示要插入的是一条完整的元组,
属性列属性值要与表中定义顺序一致。
(4)指定部分属性列:在未指定的属性列取空值。
示例:
insert into student(name,id,sex,age,birth)
values ('李伟',002,'男',23,'2010-10-30')
insert into student values
('200215129','王菊','男',25,'CS','广西','物联网'),
('200215132','王是','女',22,'CT','北京','商学院')
(2)插入子查询结果:(将新元组插入指定表中)
格式:
insert into 表名(name,Avg_age)
select name,Avg(age)
from student
group by sdept;
补充:关系数据库管理系统在执行插入语句时会检查所插入元组是否破坏表上原有的完整性规则。
实体完整性
参照完整性
用户定义完整性:
not null约束 unique约束 值域约束
二、修改数据:
1、语句格式:
update 表名
set [属性名=表达式/属性值,属性名=表达式/属性值....]
[where 条件];
2、功能:
(1)修改指定表中满足where子句条件的元组。
(2)set给出,要重置或修改,的属性键值对。
(3)如果省略where子句,表示修改表中所有元组。
(1)、修改某一个元组的值
修改学生表学号为201215121学生的年龄为22
update student
set Sage=22
where Sno='201215121';
(2)、修改多个元组的值
学生表所有学生年龄加一
update student
set Sage=Sage+1;
(3)、带子查询的修改语句
将CS系全体学生的成绩+1
update sc
set Grade=Grade+1
where Sno in
(select Sno from student
where Sdept='CS')
补充:
(1)数据库系统在执行修改时会检查修改操作是否破坏表上已定义的完整性约束条件。
(2)实体完整性 (3)主码不允许修改
(4)用户定义的完整性 not null、unique、值域约束
三、空值
空值是一个很特殊的值,含有不确定性。对关系运算带来特殊的问题,需要做特殊的处理。
(1)空值产生:
insert into SC(Sno Cno Grade)
values('201215126','1',null)
或
insert into SC(Sno,Cno)
values('201215126','1')//没有赋值的属性,其值为空null
示例1://将201215200学生系别设为空
update student
set Sdept=null
where Sno='201215200'
(2)空值的判断:
a、判断一个属性的值是否为空值,用is null或者is not null来表示。
b、找出student表中漏填了数据的学生信息
select *
from student
where Sname is null or Ssex is null or Sage is null;
(3)空值的约束条件
a、属性定义(或定义域定义)中有not null约束条件的不能取空值;
b、加了unique限制的属性不能取空值
c、码属性不能取空值
(4)空值的算术运算,比较运算和逻辑运算
a、空值与另一个值(包括空值)的算术运算的结果为空值。
b、空值与另一个值(包括空值)的比较运算的结果为unknown。
c、有unknown后,传统二值(true,false)逻辑就扩展成三值逻辑
示例:找出选修一号课程的不及格的学生
select Sno
from SC
where Grade<60 and Cno='1'
注意:
查询结果不包括缺考的学生,因为他们的Grade值为null
示例:
找出选修一号课程的不及格以及缺考的学生
select *
from sc
where (Grade is null or Grade<60) and Cno='1';