数据更新:
数据更新操作三种:向表中添加若干行数据、修改表中的数据和删除表中的若干行数据。
1、插入数据
SQL的数据插入语句INSERT通常有两种形式,一种是插入一个元组,另一种是插入子查询结果。后者可以一次插入多个元组。
插入元组:
INSERT
INTO <表名>[(<属性1>[,<属性2>]...)]
VALUES(<常量1>[,<常量2>]...);
如果INTO子句中没有指明任何属性列名,则插入的元组必须在每个属性列上均有值。VALUES子句对新元组的各属性赋值,字符串常数要用单引号(英文符号)括起来。
/*将一个新学生元组(学号:201915128,姓名:陈东,性别:男,所在系:IS,年龄:18岁)插入到Student表中*/
INSERT
INTO Student(Sno,Sname,Ssex,Sdept,Sage)
VALUES ('201915128','陈东','男','IS',18);
问题:将学生薛仁贵的信息插入到Student表中。
INSERT
INTO Student
VALUES('201903040','薛仁贵','男',18,'CS');
在INTO子句中只指定了表名,没有指出属性名。这表示新元组要在表的所有属性列上都指定值,属性列的次序与CREATE TABLE中的次序相同。
问题:插入一条选课记录
INSERT
INTO SC(Sno,Cno)
VALUES('201908076','1');
关系数据库管理系统将在新插入记录的Grade列上自动地赋空值。
插入子查询结果:
格式:
INSERT
INTO<表名>[(<属性列1>[,<属性列2>]...)]
子查询
问题:对每一个系,求学生的平均年龄,并把结果存入数据库
/*首先在数据库中建立一个新表,其中一列存放系名,另一列存放学生平均年龄*/
CREATE TABLE Dept_age
(Sdept CHAR(15)
Avg_age SMALLINT);
/*然后对Student表按系分组求平均年龄,再把系名和平均年龄存入新表中*/
INSERT
INTO Dept_age(Sdept,Avg_age)
SELECT Sdept,AVG(Sage)
FROM Student
GROUP BY Sdept;
2、修改数据
格式:
UPDATE <表名>
SET <列名><表达式>[,<列名><表达式>]...
[WHERE <条件>];
其功能是修改指定表中满足WHERE子句条件的元组。其中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');
3、删除数据
格式:
DELETE
FROM <表名>
[WHERE <条件>]
DELETE语句的功能是从指定表中删除满足WHERE字句条件的所有元组。如果省略WHERE子句则表示删除表中全部元组,但表的定义仍在字典中。也就是说,DELETE语句删除的是表中的数据,而不是关于表的定义。
/*删除学号为201903832的学生记录*/
DELETE
FROM Student
WHERE Sno='201903832';
/*删除所有学生的选课记录*/
DELETE
FROM SC;
/*删除计算机科学系所有学生的选课信息*/
DELETE
FROM SC
WHERE Sno IN
(SELETE Sno
FROM Student
WHERE Sdept='CS');
空值处理
所谓空值就是“不知道”或“不存在”或“无意义”的值。SQL语言中允许某些元组的某些属性在一定情况下取空值。一般有以下几种情况:
- 该属性应该有一个值,但目前不知道它的具体值。
- 该属性不应该有值。
- 由于某种原因不便于填写。如用户电话。
控制的判断
判断一个属性的值是否为空值,用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约束条件的不能取空值。
- 加了UNIQUE限制的属性不能取空值。
- 码属性不能取空值
空值的算术运算、比较运算和逻辑运算
- 空值与另一个值(包括另一个空值)的算数运算的结果都为空值。
- 空值与另一个值(包括另一个空值)的比较运算的结果为UNKNOWN。
- 在查询语句中,只有使WHERE和HAVING子句中的选择条件为TRUE的元组才被选出作为输出结果。
------>>>视图《MYSQL学习路线(4)》