insert into新增数据
数据的插入常用的是以下四种方法:
(1)单元组的插入
INSERT INTO 基本表名 [(列名表)] VALUES(元组值)
(2)多元组的插入
INSERT INTO 基本表名 [(列名表)] VALUES (元组值),(元组值),……,(元组值)
(3) 查询结果的插入
INSERT INTO 基本表名 [(列名表)]<SELECT查询语句>
这个语句可把一个SELECT语句的查询结果插到某个基本表中。
(4)表的插入
INSERT INTO 基本表名1 [(列名表)]TABLE 基本表名2
这个语句可把基本表2的值插入到基本表1中。
例3.24往表SC中插入元组的若干实例
①往SC中插入一个元组(S4,C6,90)
INSERT INTO SC(S#,C#,GRADE) VALUES('S4','C6','90')
②往表SC中插入一个元组(S4,C4),此处成绩值为空值
INSERT INTO SC(S#,C#) VALUES('S4','C4')
③在表SC中,把平均成绩大于80分的男学生的学号和平均成绩存入另一个已知的表S_GRADE(S#,AVG_GRADE)
注:需提前建立表S_GRADE(S#,AVG_GRADE)
INSERT INTO S_GRADE(S#,AVG_GRADE)
SELECT S#,AVG(GRADE)
FROM SC
WHERE S# IN
(SELECT S# FROM S WHERE SEX='M')
GROUP BY S#
HAVING AVG(GRADE)>80
注:在执行语句时直接就把表建立好了,不需要提前建立
SELECT S#,AVG(GRADE) AVG_GRADE INTO STU_GRADE
FROM SC
WHERE S# IN
(SELECT S# FROM S WHERE SEX='M')
GROUP BY S#
HAVING AVG(GRADE)>80
④某一个班级的选课情况已在基本表SC4(S#,C#)中,把SC4的数据插入到表SC中
INSERT INTO SC(S#,C#)
SELECT * FROM SC4
delete删除数据
SQL的删除操作是指从基本表中删除元组,其句法如下:
DELETE FROM基本表名 [WHERE 条件表达式]
其语义是从基本表中删除满足条件表达式的元组。删除语句实际上是“SELECT * FROM基本表名[WHERE条件表达式]”和DELETE操作的结合,每找到一个元组,就把它删去。应该注意,DELETE语句只能从一个基本表中删除元组。WHERE子句中条件可以嵌套,也可以是来自几个基本表的复合条件。
例3.25把课程名为DB的成绩从基本表SC中删除
DELETE FROM SC WHERE C# IN (SELECT C#
FROM C WHERE CNAME='DB')
把C4课程中小于该课程平均成绩的成绩元组从基本表SC中删除
DELETE FROM SC WHERE C#='C4'
AND GRADE<(SELECT AVG(GRADE)
FROM SC WHERE C#='C4')
注:以上语句先执行WHERE,然后才执行DELETE语句。所以两次引用SC是不会影响删除的
经验:如果只删除一张表,不需要任何条件,建议用TRUNCATE TABLE name
update修改数据
当需要修改基本表中元组的某些列值时,可以用UPDATE语句实现,其句法如下:
UPDATE 基本表名 SET 列名=值表达式[,列名=值表达式…]│ROW =(元组) [WHERE 条件表达式]
其语义是:修改基本表中满足条件表达式的那些元组中的列值,需修改的列值在SET子句中指出。
例3.26
①把C5课程的任课教师姓名改为WU
UPDATE C SET TEACHER='WU'WHERE C#='C5'
②把女同学的成绩提高10%
UPDATE SC SET GRADE=GRADE*1.1
WHERE S# IN (SELECT S# FROM S WHERE SEX='F')
③当C4课的成绩低于该门课程的平均成绩时,提高5%
UPDATE SC
SET GRADE=GRADE*1.05
WHERE C#='C4'
AND GRADE<(SELECT AVG(GRADE)
FROM SC
WHERE C#='C4')
8