1. 插入数据
SQL的数据插入语句INSERT通常有两种形式:
- 一种是插入一个元组
- 另一种是插入子查询结果,可以一次插入多个元组
1.1 插入元组
插入元组的INSERT语句的格式为:
INSERT
INTO <表名> [(<属性列1>,[,<属性列2>]……)]
VALUES (<常量1> [,<常量2>]……);
其功能是将新元组插入指定表中,其中新元组的属性列1的值为常量1,属性列2的值为常量2,……
若INTO子句中没有出现的属性列,新元组将在这些列上取空值
如果INTO子句中没有指明任何属性列名,则新插入的元组必须在每个属性列上均有值
#案例一:简单插入一行数据
INSERT
INTO stuinfo(stuid,stuname,stugender,email,age)
VALUES(1,'张三','男','zhangsan@qq.com',12);
#案例二:可以为空字段如何插入
#忽视相关字段的列名和值,或者直接写NULL
INSERT
INTO stuinfo(stuid,stuname,stugender,age)
VALUES(2,'李四','男',13);
INSERT
INTO stuinfo(stuid,stuname,stugender,email,age)
VALUES(2,'李四','男',13,NULL);
#案例三:默认字段如何插入
#不写默认值字段,或使用DEFAULT
INSERT
INTO stuinfo(stuid,stuname,email,age)
VALUES(3,'王五','wangwu@qq.com',13);
INSERT
INTO stuinfo(stuid,stuname,stugender,email,age)
VALUES(3,'王五',DEFAULT,'wangwu@qq.com',13);
#案例四:可以省略字段列表,默认所有字段
INSERT
INTO stuinfo
VALUES(4,'赵六','男','zhaoliu@qq.com',14)
1.2 插入子查询结果
子查询不仅可以嵌套在SELECT语句中用以构造父查询的条件,也可以嵌套在INSERT语句中用以生成要插入的批量数据
插入子查询结果的INSERT语句格式为:
INSERT
INTO <表名> [(<属性列1>,[,<属性列2>]……)]
子查询;
#案例:对每一个系,求学生的平均年龄,并把结果存入数据库
#1.首先在数据库中建立一个新表,其中一列存放系名,另一列存放相应的学生平均年龄
CREATE TABLE Dept_age
(Sdept CHAR(15)
Avg_age SMALLINT);
#2.让后对Student表按系分组求平均年龄,再把系名和平均年龄存入新表中
INSERT
INTO Dept_age(Sdept,Avg_age)
SELECT Sdept,AVG(Sage)
FROM Student
GROUP BY Sdept;
2. 修改数据
修改操作又称为更新操作,其语句的一般格式为:
UPDATE <表名>
SET <列名>=<表达式> [,<列名>=<表达式>]……
[WHERE <条件>];
其功能是修改指定表中满足WHERE子句条件的元组
其中SET子句给出< 表达式 >的值用于取代相应的属性列值
如果省略WHERE子句,则表达要修改表中所有元组
#1.修改某一个元组的值
#案例:将学生201215121的年龄改为22岁
UPDATE Student
SET Sage = 22
WHERE Sno = '201215121';
#2.修改多个元组的值
#案例:将所有学生的年龄增加一岁
UPDATE Student
SET Sage = Sage + 1;
#3.带子查询的修改语句
#子查询也可以嵌套在UPDATE语句中,可以构造修改的条件
#案例:将计算机科学系全体学生的成绩置零
UPDATE SC
SET Grade = 0
WHERE Sno IN
(SELECT Sno
FROM Student
WHERE Sdept = 'cs');
3. 删除数据
删除语句的一般格式为:
DELETE
FROM <表明>
[WHERE <条件>];
DELETE语句的功能是从指定表中删除满足WHERE子句条件的所有元组
如果省略WHERE子句则表示删除表中全部元组,但表的定义仍在字典中
也就是说,DELETE语句删除的是表中的数据,而不是关于表的定义
#1.删除某一个元组的值
#案例:删除学号为201215128的学生记录
DELETE
FROM Student
WHERE Sno = '201212128';
#2.删除多个元组的值
#案例:删除所有学生选课记录
DELETE
FROM SC;
#3.带子查询的删除语句
#子查询同样也可以嵌套在DELETE语句中,可以构造执行删除操作的条件
#案例:删除计算机科学系所有学生的选课记录
DELETE
FROM SC
WHERE Sno IN
(SELETE Sno
FROM Student
WHERE Sdept = 'CS');