SQL语言(三)数据库操纵语言

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

你可能感兴趣的:(数据库,数据库,sql)