目录
表数据编辑又称数据更新,包括插入数据、修改数据和删除数据三类命令。
一、插入数据
1.插入单个元组: INSERT…VALUES语句
格式为:
INSERT [INTO]<表名> [ ( ]<列名> [,…n] ) ]
VALUES ( [,…n] )
注意:
(1)未出现在列名列表中的列插入时取空值;
(2)表达式数量必须和列名数量相等,表达式的数据类型必须和对应列的数据类型相兼容;
(3)关系中的NOT NULL列必须出现在列名列表中;
(4)若省略列名列表,则VALUES须指定所有列的值。
【例】将(’S060102’, ’010201’)插入选课表。
INSERT INTO 选课表 (学号, 开课号)
VALUES ('S060102', '010201')
2.插入子查询的结果: INSERT…SELECT语句
格式为:
INSERT [INTO]<表名> [ <列名>( [,…n] ) ]
SELECT语句
【例】求各个专业学生的平均累计学分,把结果存入表中。
CREATE TABLE 主修专业 ( 专业 CHAR(20), avgpa INT)
GO
INSERT INTO 主修专业(专业, avgpa)
SELECT 专业, AVG(累计学分) FROM 学生表
GROUP BY 专业
3.使用SELECT…INTO语句进行数据插入
格式为:
SELECT <目标列>[,…n] INTO<新表名>
[ SELECT语句的其他子句 ]
注意:
(1)系统会自动创建一个新表,新表的结构由目标列表达式定义,然后将 SELECT 语句的结果集插入这个新表 ;
(2)当目标列是计算列时,必须为它起别名。
【例】用SELECT … INTO语句,求各个专业学生的平均累计学分,把结果存入表中。
SELECT 专业, AVG(累计学分) AS 平均累计学分 INTO 主修专业
FROM 学生表
GROUP BY 专业
二、修改数据
1、数据修改语句:UPDATE
格式为:
UPDATE<表名> SET {<列名> = <表达式>}[,…n]
[ FROM <表名>[,…n] ]
[ WHERE <修改条件>]
注意:
(1)UPDATE语句用来修改指定表中满足WHERE条件的元组。修改方法是用SET子句中的值取代相应列的值 ;
(2)修改条件和SELECT语句中WHERE条件完全相同,它不仅可以直接使用UPDATE后面的表,也可通过引入FROM子句直接使用其他表,还可以将子查询嵌入修改条件中。
2、修改给定表的所有行
若省略WHERE子句,则UPDATE将修改表的所有行。
【例】将所有学生的累计学分增加3分。
UPDATE 学生表 SET 累计学分=累计学分+3
3、基于给定表修改某些行
如果省略FROM子句,但含有WHERE子句,则UPDATE语句将修改满足修改条件的行,但是此时的修改条件只能直接使用UPDATE后面的表所包含的列。
【例】将计算机专业所有女生的籍贯改为“杭州”,累计学分增加3分。
UPDATE 学生表 SET 累计学分=累计学分+3, 籍贯='杭州'
WHERE 专业 = '计算机' AND 性别 = '女'
4、基于其他表修改某些行
如果修改条件需要使用其他表的列,就要用FROM子句将这些表引入到UPDATE语句中。
【例】将计算机专业所有学生的数据库原理课程的成绩增加10分。
UPDATE 选课表
SET 成绩 = 成绩+10
FROM 开课表 AS O, 课程表 AS C, 学生表 AS S
WHERE 专业 = '计算机' AND 课名 = '数据库原理'
AND C.课号 = O.课号 AND O.开课号 = 选课表.开课号
AND 选课表.学号 = S.学号
5.用子查询修改某些行
UPDATE中的修改条件还可以通过嵌入子查询进行构造。
【例】用子查询构造,将计算机专业所有学生的数据库原理课程的成绩增加10分。
UPDATE 选课表
SET 成绩 = 成绩+10
FROM 学生表 AS S
WHERE 专业 = '计算机' AND 选课表.学号 = S.学号 AND 开课号
IN (SELECT 开课号 FROM 开课表 WHERE 课号 IN
( SELECT 课号 FROM 课程表 WHERE 课名 = '数据库原理' ) )
三、删除数据
1.数据删除语句:DELETE
格式为:
DELETE [FROM]<目标表名>
[ FROM <表名>[,…n] ]
[ WHERE <删除条件>]
注意:
(1) DELETE语句用来删除指定表中满足删除条件的元组;
(2)删除条件和SELECT语句中WHERE条件完全相同,它不仅可以直接使用DELETE后面的表,也可通过引入FROM子句直接使用其他表,还可以将子查询嵌入删除条件中。
2.删除给定表的所有行
若省略WHERE子句,则DELETE将删除表的所有行。
【例】将Student表清空。
DELETE FROM Student 3.
3. 基于给定表删除某些行
如果省略FROM子句,但含有WHERE子句,则DELETE语句将删除满足删除条件的行,但是此时的删除条件只能直接使用DELETE后面的表所包含的列。
【例】从Student表中删除计算机专业所有女生的信息。
DELETE FROM 学生表
WHERE 专业 = '计算机' AND 性别 = '女'
4.基于其他表删除某些行
如果删除条件需要使用其他表的列,就要用FROM子句将这些表引入到DELETE语句中。
【例】从选课t表中删除计算机专业所有学生对数据库原理课程的选修信息。
DELETE FROM 选课表 FROM 开课表 AS O, 课程表 AS C, 学生表 AS S
WHERE 专业 = '计算机'
AND 课名 = '数据库原理'
AND C.课号 = O.课号
AND O.开课号 = 选课表.开课号
AND 选课表.学号 = S.学号
5.用子查询删除某些行
DELETE中的删除条件还可以通过嵌入子查询进行构造。
【例】用子查询构造从选课t表中删除计算机专业所有学生对数据库原理课程的选修信息。
DELETE FROM 选课表 FROM 学生表 AS S
WHERE 专业 = '计算机' AND 选课表.学号 = S.学号 AND 开课号
IN ( SELECT 开课号
FROM 开课表WHERE 课号
IN ( SELECT 课号 FROM 课程表
WHERE 课名 = '数据库原理’ ) )