程序员

SQL——数据库的修改

2018-04-02  本文已影响0人  薛定谔与猫的故事

在前面提到的大多数多事对数据库的信息抽取上,数据库的本质,其实就是对文件的封装,文件最基本的功能就是要有增删改查四种,而数据库也应该有。

1、删除

对于删除我们前面也有提到过,那时提到的是删除关系中的所有元组,而显然大多数情况我们会要求删除特定的元组,这时候就需要添加谓词来限定。

通式

#在以后我们会用r来代表关系(relationship),A表示属性(attribute),p表示谓词(predicate)
#如果省略了P,就是前面提到的删除所有元组
delete from r
where P;

注:delete命令只能作用于一个关系。P谓词可以嵌入子查询,相信读者很容易做到。

2、插入(增加)

在前面也有提到过插入的基本形式,就不介绍了。

我们可能会想,在查询结果的基础上插入元组。假设我们想让cs系每个修满190学分的学生成为cs系的教师,其工资为18000,我们可以这样写:

INSERT INTO instructor
    SELECT id,name,dept_name,18000
    FROM student
    WHERE (dept_name,tol_cred)=('computer science',190);

和基本形式不同,没有指定特定的元组,而是用select选出一个元组集合。

3、更新(修改)

有时候,我们希望只改变元组的某些属性值时,这个时候就用到更新命令update。待更新的元组可用查询语句找到。

通式

update r
set A1 = new_value1,A2 = new_value2...
where P;

例如我们给工资低于12001的教师涨工资:

UPDATE instructor
SET salary = salary*1.05
WHERE salary<12001;
更新前
更新后

假设要给工资少于30000的教师涨3%的工资,其余教师涨5%,我们可能会写两句update:

UPDATE instructor
SET salary = salary*1.03
WHERE salary>30000;

UPDATE instructor
SET salary = salary*1.05
WHERE salary<=30000;

不过若是我们将两句的顺序颠倒,工资少于3000的教师的工资将增长>8%的工资。

为了减少这种错误,可以使用SQL提供的case结构,例如上面的例子可以写成:

UPDATE instructor
SET salary = CASE
      WHEN salary <=30000 THEN salary*1.05
      ELSE salary * 1.03
    END ;

case语句的一般格式如下:

case
    when p1 then result1
    when p2 then result2
    ...
    when pn then resultn
    else result_t
end

当i第一个满足的p1,p2,……pn时,此操作就会返回result(i);如果没有一个谓词可以满足,则返回result_t。case语句可以用在任何应该出现值得地方。

上一篇下一篇

猜你喜欢

热点阅读