DML,英文叫做 Data Manipulation Language,数据操作语言,我们用它操作和数据库相关的记录,比如增加、删除、修改数据表中的记录。
我们只能删除整个元组,而不能只删除某些属性上的值。SQL用如下语句表示删除:
delete from r
where P;
其中P代表一个谓词,r代表一个关系。
例,从instructor关系中删除与Finance系教师相关的所有元组。
delete from instructor
where dept_name =‘Finance’;
SQL允许使用insert语句
,向关系中插入元组,形式如下:
insert into r [(c1,c2,…)]
values (e1,e2,…);
insert into r [(c1,c2,…)]
select e1,e2,… from …;
例1,假设我们要插入的信息是Computer Science系开设的名为“Database Systems”的课程CS-437,它有4个学分。
insert into course
values (‘CS-437’, ‘Database Systems’, ‘Comp. Sci.’, 4);
SQL允许在insert语句中指定属性,所以上述语句还可写为:
insert into course (course_id, title, dept_name, credits)
values (‘CS-437’, ‘Database Systems’, ‘Comp. Sci.’, 4);
例2,假设我们想让Music系每个修满144学分的学生成为Music系的教师,其工资为18
000美元
insert into instructor
select ID, name, dept_name, 18000
from student
where dept_name = ‘Music’ and tot_cred > 144;
SQL允许使用update语句
,在不改变整个元组的情况下改变其部分属性的值,形式如下:
update r
set <c1=e1 ,[c2=e2,… ]>
[where <condition>] ;
例1,假设给工资超过100 000美元的教师涨3%的工资,其余教师涨5%
我们可以写两条update语句:
update instructor
set salary = salary * 1.03
where salary > 100000;
update instructor
set salary = salary * 1.05
where salary <= 100000;
注意:这两条update语句的顺序十分重要。如果调换顺序,可能导致工资略少于100 000美元的教师将增长8%的工资。
针对上例查询,我们也可以使用SQL提供的case结构
,避免更新次序引发的问题,形式如下:
case
when pred1 then result1
when pred2 then result2
. . .
when predn then resultn
else result0
end
因此上例查询可重新为:
update instructor
set salary = case
when salary <= 100000 then salary * 1.05
else salary * 1.03
end