目录
1. 数据更新
1.1 插入数据
1.1.1 插入元组
1.1.2 插入子查询结果
1.2 修改数据
1.2.1 修改某一个元组的值
1.2.2 修改多个元组的值
1.2.3 带子查询的修改语句
1.3 删除数据
1.3.1 删除某一个元组的值
1.3.2 删除多个元组的值
1.3.3 带子查询的删除语句
2. 空值处理
2.1 空值的产生
2.2 空值的判断
2.3 空值的约束条件
2.4 空值的算术运算、比较运算和逻辑运算
有三种数据更新操作:
插入数据、修改数据、删除数据
- 两种插入数据的方法
- 插入元组
- 插入子查询结果(可以一次插入多个元组)
INSERT
INTO<表名>[(<属性列1>[,<属性列2>]...)]
VALUES(<常量1>[,<常量2>]...);
功能: 将新元组插入指定表中
--将一个新学生元组(学号:201215128;姓名:陈冬;性别:男;所在系:IS;年龄:18岁)插入到Student表中。
INSERT INTO STUDENT(SNO,SNAME,SSEX,SDEPT,SAGE) VALUES('201215128','陈冬','男','IS',18);
--插入一条选课记录('201215128','1')
--方法1 INSERT INTO SC(SNO,CNO) VALUES('201215128','1'); --方法2 INSERT INTO SC VALUES('201215128','1',NULL);
子查询嵌套在INSERT语句中以生成要插入的批量数据
INSERT
INTO<表名>[(<属性列1>[,<属性列2>]...)]
子查询;
--对每一个系,求学生的平均年龄,并把结果存入数据库
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;
SELECT子句目标列必须与INTO子句匹配
又称更新操作,一般格式为
UPDATE <表名>
SET <列名>=<表达式> [,<列名>=<表达式>] ...
[WHERE<条件>] ;
--将学生201215121的年龄改为22岁
UPDATE STUDENT SET SAGE=22 WHERE SNO='201215121';
--将所有学生的年龄增加1岁
UPDATE STUDENT SET SAGE=SAGE+1;
--将计算机科学系全体学生的成绩置零
UPDATE SC SET GRADE=0 WHERE SNO IN( SELECT SNO FROM STUDENT WHERE SDEPT='CS');
DELETE
FROM<表名>
[WHERE<条件>];
功能:从指定表中删除满足WHERE子句条件的所有元组
DEIETE语句删除的是表中的数据,而不是关于表的定义
--删除学号为201215128的学生记录
DELETE FROM STUDENT WHERE SNO='201215128'
--删除所有的学生选课记录
DELETE FROM SC
--删除计算机科学系所有学生的选课记录
DELETE FROM SC WHERE SNO IN( SELECT SNO FROM STUDENT WHERE SDEPT='CS');
空值就是“不知道”或“不存在”或“无意义”的值
- 一般有以下几种情况:
- 该属性应该有一个值,但目前不知道它的具体值
- 该属性不应该有值
- 由于某种原因不便于填写
--向SC表中插入一个元组,学号是'201215126',课程号是'1',成绩为空
--方法1 INSERT INTO SC(SNO,CNO) VALUES('201215126','1'); --方法2 INSERT INTO SC(SNO,CNO,GRADE) VALUES('201215126','1',NULL);
--将表中学生号为'201215200'的学生所属的系改为空值
UPDATE STUDENT SET SDEPT = NULL WHERE SNO='201215200'
判断一个属性的值是否为空值,用 IS NULL 或 IS NOT NULL 来表示
--从STUDENT表中找出漏填了数据的学生信息
SELECT * FROM STUDENT WHERE SNAME IS NULL OR SSEX IS NULL OR SAGE IS NULL OR SDEPT IS NULL;
有NOT NULL 约束条件的不能取空值
码属性不能取空值
--选出选修了1号课程的不及格的学生以及缺考的学生
SELECT SNO FROM SC WHERE CNO='1' AND(GRADE<60 OR GRADE IS NULL);