文章目录

  • 数据更新
  • 一、插入数据
  • 1)插入一个元组
  • 2)插入子查询的结果(插入多个元组)
  • 二、修改数据
  • 1、修改某一元组的值
  • 2、修改多个元组的值
  • 3、带自查询的修改语句
  • 三、删除数据
  • 1、删除某一个元组的值
  • 2、删除多个元组的值
  • 3、带子查询的删除语句
  • 空值处理
  • 1、空值的产生
  • 2、空值的判断
  • 3、空值的约束条件
  • 4、空值的算术运算、比较运算和逻辑运算


数据更新

一、插入数据

1)插入一个元组
INSERT INTO <表名>[列名]
VALUES(<常量1>,<常量2>...)

例子:

INSERT INTO Student
VALUES('2015234','张杰','男')
INSERT INTO SC(Sno,Cno)
VALUES('2015327','1')
2)插入子查询的结果(插入多个元组)
INSERT INTO <表名>[列名]
子查询;
INSERT INTO Dept_age(Sdept,Avg_age)
SELECT Sdept,AVG(Sage)
FROM Student
GROUP BY Sdpet;

二、修改数据

UPDATE <表名>
SET <列名>=<表达式>
[WHERE<条件>]

如果省略where子句,则表示要修改表中的所有元组

1、修改某一元组的值
UPDATE Student
SET Sage=22
WHERE Sno='201215121';
2、修改多个元组的值
UPDATE Student
SET Sage = Sage+1`在这里插入代码片`
3、带自查询的修改语句
UPDATE SC
SET Grade=0
WHERE Sno IN
(SELECT Sno FROM Student WHERE Sdpet='CS');

三、删除数据

DELETE
FROM <表名>
WHERE <条件>

如果省略WHERE子句则删除表中的全部元组,但表的定义任然在字典中,也就是说,delete删除的是表的数据,而不是表的定义(注意和drop区分)

1、删除某一个元组的值
DELETE
FROM Student
WHERE Sno='201215128';
2、删除多个元组的值
--删除所有学生信息
DELETE 
FROM Student
3、带子查询的删除语句
DELETE 
FROM SC
WHERE Sno IN(
SELECT Sno FROM Student WHERE Sdept='CS');

空值处理

所谓空值就是“不知道”,“不存在”,“无意义”的值

1、空值的产生

  1. 插入

在插入语句中没有赋值的属性,其值为空值

INSERT INTO SC(Sno,Cno)
VALUES
('2013344','1')
  1. 更新
UPDATE Student
SET Sdept=NULL
WHERE Sno='20121567';
  1. 外连接产生空值
  2. 空值关系的运算也会产生空值

2、空值的判断

IS NULL/IS NOT NULL
SELECT * FROM Student
WHERE
Sno IS NULL OR Ssex IS NULL OR Sdpt IS NULL OR Sage IS NULL;

3、空值的约束条件

  1. 属性定义NOT NULL的不能取空值
  2. UNIQUE限制的属性不能取空值
  3. 码属性不能取空值

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

  1. 空值与另一个值得算术运算结果为空值
  2. 空值与另一个值得比较运算结果为UNKONWN
  3. 有了UNKONWN,传统的逻辑运算中的二值就变成三值逻辑

在查询语句中,只有WHERE和HAVING子句中选择条件为TRUE(过滤掉UNKNOWN和FALSE)的元组才被选出作为输出结果

SELECT Sno
FROM SC
WHERE Grade>60 AND Cno='1';
--不包括缺考的同学
SELECT Sno FROM SC WHERE Grade<60 AND Cno='1' 
UNION
SELECT Sno FROM SC WHERE Grade IS NULL AND Cno='1'

equal

SELECT Sno FROM SC WHERE Cno='1' AND (Grade IS NULL OR Grade<60);