概述
3.5数据更新
3.5.1插入数据
两种方式
-
插入元组
-
插入子查询结果(可以一次插入多个元组)
语句格式
INSERT
INTO <表名> [(<属性列1>[,<属性列2 >…)]
VALUES (<常量1> [,<常量2>]… );
1,插入元组
INTO子句
-
指定要插入数据的表名及属性列
-
属性列的顺序可与表定义中的顺序不一致
-
没有指定属性列:表示要插入的是一条完整的元组,且属性列属性与表定义中的顺序一致
-
指定部分属性列:插入的元组在其余属性列上取空值
/*将一个新学生元组(学号:201215128;姓名:陈冬;性别:男;所在系:IS;年龄:18岁)插入到Student表中*/
INSERT
INTO
Student (Sno,Sname,Ssex,Sdept,Sage)
VALUES ('201215128','陈冬','男','IS',18);
/*关系数据库管理系统将在新插入记录的Grade列上自动地赋空值。*/
INSERT
INTO SC(Sno,Cno)
VALUES ('201215128 ',' 10');
注:插入时要注意外键约束,存在才能插入
2,插入子查询结果
语句格式 INSERT INTO <表名> [(<属性列1> [,<属性列2>… )] 子查询;
into子句子查询select子句应该和into子句匹配(值的个数、值的类型)
第一步:建表
CREATE TABLE Dept_age
( Sdept CHAR(15) /*系名*/
Avg_age SMALLINT);
/*学生平均年龄*/
第二步:插入数据
INSERT
INTO Dept_age(Sdept,Avg_age)
SELECT Sdept,AVG(Sage)
FROM Student
GROUP BY Sdept
注:关系数据库管理系统在执行插入语句时会检查所插元组是否破坏表上已定义的完整性规则
3.5.2修改数据
UPDATE <表名>
SET <列名>=<表达式>[,<列名>=<表达式>]…
[WHERE <条件>];
三种修改方式:
-
修改某一元组的值
-
修改多个元组的值
-
带子查询的修改语句
UPDATE
Student
SET Sage=22
WHERE
Sno=' 201215121 ';
UPDATE SC
SET Grade=0
WHERE Sno IN
(SELECT Sno
FROM Student
WHERE Sdept='CS' );
/*关系数据库管理系统在执行修改语句时会检查修改操作是否破坏表上已定义的完整性规则*/
/*带子查询的*/
UPDATE SC
SET Grade=0
WHERE Sno IN
( SELECT Sno
FROM Student
WHERE
Sdept= 'CS' );
3.5.3删除数据
DELETE
FROM <表名>
[WHERE <条件>];
DELETE
FROM SC
WHERE Sno IN
(SELECT Sno
FROM Student
WHERE Sdept= 'CS');
-
缺省表示要删除表中的全部元组,表的定义仍在字典中
3.6空值的处理
情况:
-
该属性应该有一个值,但目前不知道它的具体值
INSERT INTO SC(Sno,Cno,Grade)
VALUES('201215126 ','1',NULL); /*该生还没有考试成绩,取空值*/
-
该属性不应该有值
-
由于某种原因不便于填写
约束条件:
-
有NOT NULL约束条件的不能取空值
-
加了UNIQUE限制的属性不能取空值
-
码属性不能取空值
空值的算数运算、比较运算和逻辑运算
空值与另一个值(包括另一个空值)的算术运算的结果为空值
空值与另一个值(包括另一个空值)的比较运算的结果为UNKNOWN。
有UNKNOWN后,传统二值(TRUE,FALSE)逻辑就扩展成了三值逻辑
/*选出选修1号课程的不及格的学生以及缺考的学生。*/
SELECT Sno
FROM SC
WHERE Grade < 60 AND Cno='1'
UNION
SELECT Sno
FROM SC
WHERE Grade IS NULL AND Cno='1'
/*或*/
SELECT Sno
FROM SC
WHERE Cno='1' AND (Grade<60 OR Grade IS NULL);/*一定要加括弧*/
-
null不参与比较,Grade<60不包括null,要另外限制
最后
以上就是苗条导师为你收集整理的数据库的数据更新和空值的处理的全部内容,希望文章能够帮你解决数据库的数据更新和空值的处理所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复