美文网首页程序员
SQL——数据库的修改

SQL——数据库的修改

作者: 薛定谔与猫的故事 | 来源:发表于2018-04-02 19:29 被阅读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语句可以用在任何应该出现值得地方。

    相关文章

      网友评论

        本文标题:SQL——数据库的修改

        本文链接:https://www.haomeiwen.com/subject/bbbxhftx.html