文章目录
数据更新
一、插入数据
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、空值的产生
- 插入
在插入语句中没有赋值的属性,其值为空值
INSERT INTO SC(Sno,Cno)
VALUES
('2013344','1')
- 更新
UPDATE Student
SET Sdept=NULL
WHERE Sno='20121567';
- 外连接产生空值
- 空值关系的运算也会产生空值
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、空值的约束条件
- 属性定义NOT NULL的不能取空值
- UNIQUE限制的属性不能取空值
- 码属性不能取空值
4、空值的算术运算、比较运算和逻辑运算
- 空值与另一个值得算术运算结果为空值
- 空值与另一个值得比较运算结果为UNKONWN
- 有了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);