SQL之数据更新

SQL之数据更新

文章为个人读书总结笔记 发现错误以及如果有什么建议可以及时通知我哟!

本文介绍更新数据的三大操作:插入,修改,删除

注意这边的数据指的是元组(单元组,多元组

实现:插入数据 - INSERT INTO

SQL提供INSERT INTO语句执行数据的插入

可以:插入元组

介绍插入单元组的细节

  • 格式

    INSERT
    INTO  <表名> [( <属性列1>[,<属性列2>]... )]
    VALUES  (<常量1> [,<常量2>]... )
    • 解释

    • 常量和属性列一一对应

      • 简单说明:注意这边的一一对应(但是INTO子句后的属性列顺序可以不同于CREATE TABLE时指定的属性定义顺序
      INSERT
      INTO    S(Sno,Sname,Ssex,Sdept,Sage)
      VALUES  ('100','小k','男','CS',20);

    • 若属性列全部列出则可以只写表名

      • 简单说明:插入的数据对应全部的列属性
      INSERT
      INTO    S
      VALUES  ('100','小k','男','CS',20);

    • 若属性列未全部列出 (你可以选择显式指出NULL,或者将自动赋空值

      • 简单说明:Sage自动为NULL
      INSERT
      INTO    S(Sno,Sname,Ssex,Sdept)
      VALUES  ('100','小k','男','CS');
      • 若这些列在定义时指出NOT NULL可能会出错误,要避免

可以:插入子查询获取元组

插入子查询即为插入多个元组的实现,这边将使用到SELECT-FROM-WHERE子查询, 若不熟悉的话可以参照我的另外一篇博文 ” SQL之数据查询 “

  • 插入子查询的格式:对照插入单个元组的格式来理解(子查询提供了多元组

    INSERT
    INTO  <表名> [( <属性列1>[,<属性列2>]... )]
    子查询;
    • 例子:对于每一个Sdept,求均值,将结果存入数据库
    CREATE  TABLE   Dept_age(
        Sdept   CHAR(15),
        Avg_age SMALLINT);
    
    INSERT
    INTO    Dept_age(Sdept,Avg_age)
    SELECT  Sdept,AVG(Sage)
    FROM    S
    GROUP   BY  Sdept;
    • 执行过程
      • 子查询输出单元组Sdept及对应的均值AVG(Sage)
      • 将单元组输入到Dept_age表
      • 继续重复第一步

实现:修改数据 - UPDATE SET

参照于插入数据,依然有两种方式,即修改单元组或者修改多元组,多元组方面由子查询来实现

比较特殊的就是修改全部元组!

  • 一般格式

    UPDATE    <表名>
    SET   <列名>=<表达式> [,<列名>=<表达式>] ...
    [WHERE <条件>]
    • SET子句
      • 由一至多个 属性-表达式 对组成,表达式取代属性的值
    • WHERE子句
      • 指出了满足的元组
    • 特殊:未写出WHERE子句,则默认全部元组均满足

可以:修改单元组的值

  • 例子:针对S表,将Sno为100的数据中,Sage属性列的值修改为18

    UPDATE    S
    SET   Sage=18
    WHERE Sno='100';

可以:修改全元组的值

  • 例子:将所有元组的Sage属性列值增加1

    UPDATE    S
    SET   Sage=Sage+1;

可以:使用子查询

这边的子查询用于构造条件

  • 例子:将Sdept为’CS’的全部数据的Grade属性列全部设置为0

    UPDATE    SC
    SET   Grade=0
    WHERE Sno IN(
    SELECT  Sno
    FROM    S
    WHERE   Sdept='CS');

实现:删除数据 - DELTE FROM

参照修改数据,由WHERE来指定满足的元组,不写出WHERE子句则全部元组为满足元组

这边要注意的是:删除的是表中的数据,而非表的定义

关于表定义参考我的另外一篇博文 “SQL之数据定义”

  • 格式

    DELETE
    FROM <表名>
    [WHERE    <条件>];

可以:删除单元组

  • 例子:操作S表,删除Sno为’100’的元组

    DELETE
    FROM  S
    WHERE Sno='100';

可以:删除全部元组

  • 例子:删除SC表全部数据

    DELETE
    FROM  SC;

可以:使用子查询

这边的子查询也是用于构造条件

  • 例子:删除SC表中,满足Sdept为‘CS’的数据

    DELETE    
    FROM  SC
    WHERE Sno IN(
        SELECT  Sno
        FROM    S
        WHERE   Sdept='CS');
    • 执行步骤
    • 由子查询根据满足Sdept=’CS’的条件从S表中输出Sno
    • 根据满足的Sno所有元组,从SC表中删除这些元组

最后:补充说明

插入,修改,删除均有针对单元组和多元组的操作

多元组可以由子查询来构造条件获取

  • 说明
    • 如果你以为如上介绍的那么简单,那你就错了,对于某个表的数据进行插入,修改,删除可能会破坏参照完整性
    • 不过不用担心,很快我将介绍相关的参照完整性以及如何去检查并控制它们

更多相关资料在 我的”SQL专栏” 中可以找到 !
如果文章对你有帮助的话 给我点个赞吧b( ̄▽ ̄)d !

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值