• SQL语言---数据更新


    文章目录

    • 前言
    • 一、数据更新之插入数据
      • 1.插入单个元组
        • (1)语句格式
        • (2)语法说明
          • INTO子句
          • VALUES子句
          • 插入规则
        • (3)举例讲解
          • 例子1:
          • 例子2:
          • 易犯错误
      • 2.插入子查询结果
        • (1)语句格式
        • (2)语法说明
          • INTO子句(与插入单条元组类似)
          • 子查询
          • 查询规则
        • (3)举例讲解
          • 例子1:新建一张表存放每部门员工的平均工资。
    • 二、数据更新之修改数据
      • 1.修改某一个元组的值
        • (1)语法格式
        • (2)语法说明
          • SET子句
          • WHERE子句
          • 语法规则
        • (3)举例讲解
          • 例子1:部门调整
      • 2.修改多个元组的值
        • (1)举例讲解
          • 例子1:为员工发放薪金
      • 3.带子查询的修改语句
        • (1)语法结构
        • (2)举例讲解
          • 例子1:不知道部门编号的情况下发奖金
    • 三、数据更新之删除数据
      • 1.删除某一元组的值
        • (1)语法格式
        • (2)语法说明
          • FROM子句
          • WHERE子句
        • (3)举例讲解
          • 例子1:删除离职人员信息
      • 2.删除多个元组的值
        • (1)举例讲解
          • 例子1:解散部门
      • 3.带子查询的删除语句
        • (1)语法格式
        • (2)举例讲解
          • 例子1:不知道部门编号的情况下解散部门
      • 4.删除的易错点
        • (1)违反完整性约束条件
        • (2)DELETE不支持CASCADE
    • 总结


    前言

    本文主要讲解了SQL语言中的数据更新的语法,并且举例进行相关知识的说明和讲解。


    一、数据更新之插入数据

    1.插入单个元组

    插入单个元组可以理解为给表插入一行数据

    (1)语句格式

    功能:将新元组插入指定表中

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

    (2)语法说明

    INTO子句
    • 指定要插入数据的表名及属性列
    • 属性列的顺序可与表定义中的顺序不一致
    • 没有指定属性列:表示要插入的是一条完整的元组,且属性列属性与表定义中的顺序一致
    • 指定部分属性列:插入的元组在其余属性列上取空值(ORACLE这条不适用)
    VALUES子句
    • 提供的值必须与INTO子句匹配
      – 值的个数
      – 值的类型
    插入规则

    DBMS在执行插入语句时会检查所插元组是否破坏表上已定义的完整性规则
    a.实体完整性

    b.参照完整性

    c.用户定义的完整性

    • 对于有NOT NULL约束的属性列是否提供了非空值
    • 对于有UNIQUE约束的属性列是否提供了非重复值
    • 对于有值域约束的属性列所提供的属性值是否在值域范围内

    (3)举例讲解

    首先给出目前表的完整性情况:
    1、DEPT表有三个字段,分别为DEPTNO、DNAME、LOC
    2、其中DEPTNO是主键,不能为空值
    3、DNAME和LOC 可以为空值
    4、DEPTNO的字符类型是2位整数,DNAME和LOC是字符串

    在这里插入图片描述

    例子1:

    插入单个元组进入表:

    INSERT 
    INTO DEPT
    VALUES ('50','MARKETING','BEIJING');
    
    • 1
    • 2
    • 3

    结果:
    在这里插入图片描述

    例子2:

    目前公司打算组建一个技术部(部门编号为60,部门名称为TECHNOLOGY,部门还没想好落户在哪个城市)。
    插入方法1:

    INSERT
    INTO DEPT
    VALUES ('60','TECHNOLOGY','');
    
    • 1
    • 2
    • 3

    插入方法2:

    INSERT
    INTO DEPT
    VALUES ('60','TECHNOLOGY',NULL);
    
    • 1
    • 2
    • 3
    易犯错误

    NULL值多了单引号,表示插入的是NULL这个单词,而不是插入的空值
    正确代码:

    INSERT
    INTO DEPT
    VALUES ('60','TECHNOLOGY',NULL);
    
    • 1
    • 2
    • 3

    错误代码:

    INSERT
    INTO DEPT
    VALUES ('60','TECHNOLOGY','NULL');
    
    • 1
    • 2
    • 3

    结果会发现错误的代码相当于把NULL当成字符串写入了表中。
    在这里插入图片描述

    2.插入子查询结果

    将子查询结果插入到指定表中

    (1)语句格式

    INSERT
    INTO <表名> [(<属性1>[,<属性2>...])]
    子查询;
    
    • 1
    • 2
    • 3

    (2)语法说明

    INTO子句(与插入单条元组类似)
    • 指定要插入数据的表名及属性列
    • 属性列的顺序可与表定义中的顺序不一致
    • 没有指定属性列:表示要插入的是一条完整的元组
    • 指定部分属性列:插入的元组在其余属性列上取空值(ORACLE这条不适用)
    子查询

    SELECT子句目标列必须与INTO子句匹配

    • 值的个数
    • 值的类型
    查询规则

    DBMS在执行插入语句时会检查所插元组是否破坏表上已定义的完整性规则
    a.实体完整性

    b.参照完整性

    c.用户定义的完整性

    • 对于有NOT NULL约束的属性列是否提供了非空值
    • 对于有UNIQUE约束的属性列是否提供了非重复值
    • 对于有值域约束的属性列所提供的属性值是否在值域范围内

    (3)举例讲解

    例子1:新建一张表存放每部门员工的平均工资。

    数据存放在表EMP中:
    在这里插入图片描述
    思路:

    • 第一步,先建一张表,表字段DEPTNO、AVGSAL

    • 第二步,查询EMP表中的部门平均工资,将查到的值插入新建的表中

    CREATE TABLE DEPT_AVGSAL
    (
    DEPTNO NUMBER(2,0) NOT NULL,
    AVGSAL NUMBER(6,2) NOT NULL,
    CONSTRAINT DEPT_AVGSAL_PK PRIMARY KEY 
    	(
    		DEPTNO 
    	)
    ENABLE
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    INSERT
    INTO DEPT_AVGSAL(DEPTNO,AVGSAL)
    SELECT DEPTNO,AVG(SAL)
    FROM EMP
    GROUP BY  DEPTNO;
    
    • 1
    • 2
    • 3
    • 4
    • 5

    结果为:
    在这里插入图片描述

    二、数据更新之修改数据

    1.修改某一个元组的值

    修改指定表中满足WHERE子句条件的元组

    (1)语法格式

    UPDATE  <表名>
    SET  <列名>=<表达式>[,<列名>=<表达式>][WHERE <条件>];
    
    • 1
    • 2
    • 3

    (2)语法说明

    SET子句

    指定修改方式

    • 要修改的列
    • 修改后取值
    WHERE子句

    指定要修改的元组

    • 缺省表示要修改表中的所有元组
    语法规则

    DBMS在执行修改语句时会检查修改操作是否破坏表上已定义的完整性规则
    a.实体完整性

    b.主码不允许修改

    c.用户定义的完整性

    • NOT NULL约束
    • UNIQUE约束
    • 值域约束

    (3)举例讲解

    例子1:部门调整

    将SMITH的部门调整到MARKETING(部门编号50)
    原始表如下:
    在这里插入图片描述

    UPDATE EMP
    SET DEPTNO=50
    WHERE ENAME='SMITH';
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    2.修改多个元组的值

    语法格式和规则与修改单个元组的值一致,不作赘述

    (1)举例讲解

    例子1:为员工发放薪金

    将所有人工资增加100元,设置RESEARCH部门(假设知道部门编号为20)的员工月奖金为100元
    原来数据如下:
    在这里插入图片描述
    分两步操作:

    UPDATE EMP
    SET SAL=SAL+100;
    
    • 1
    • 2
    UPDATE EMP
    SET COMM=100
    WHERE DEPTNO=20;
    
    • 1
    • 2
    • 3

    结果:
    在这里插入图片描述

    3.带子查询的修改语句

    (1)语法结构

    UPDATE <表名>
    SET <列名>=<表达式>[,<列名>=<表达式>]WHERE (子查询);
    
    • 1
    • 2
    • 3

    (2)举例讲解

    例子1:不知道部门编号的情况下发奖金

    所有数据与之前的例子一致,这里只放代码,不做过多赘述

    UPDATE EMP
    SET COMM=200
    WHERE(
    	SELECT DEPTNO
    	FROM EMP
    	WHERE DNAME='ACCOUNTING'
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    三、数据更新之删除数据

    1.删除某一元组的值

    删除指定表中满足WHERE子句条件的元组

    (1)语法格式

    DELETE
    FROM <表名>
    [WHERE <条件>];
    
    • 1
    • 2
    • 3

    (2)语法说明

    FROM子句

    指定从哪个表删除

    WHERE子句
    • 指定要删除的元组所满足的条件
    • 缺省表示要修改表中的所有元组

    (3)举例讲解

    例子1:删除离职人员信息

    员工MARTIN离职,需要删除他的基本信息
    在这里插入图片描述

    DELETE 
    FROM EMP
    WHERE ENAME='MARTIN';
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    2.删除多个元组的值

    语法格式和规则与修改单个元组的值一致,不作赘述

    (1)举例讲解

    例子1:解散部门

    公司裁员,解散RESEARCH部门(假设知道部门编号为20),删除RESEARCH部门的所有信息。

    DELETE 
    FROM EMP
    WHERE DEPTNO=20;
    
    • 1
    • 2
    • 3

    3.带子查询的删除语句

    (1)语法格式

    DELETE
    FROM <表名>
    WHERE (子查询);
    
    • 1
    • 2
    • 3

    (2)举例讲解

    例子1:不知道部门编号的情况下解散部门

    公司裁员,解散ACCOUNTING部门(假设不知道部门编号),删除ACCOUNTING部门的所有信息。

    DELETE
    FROM EMP
    WHERE(
    	SELECT DEPTNO
    	FROM EMP
    	WHERE DNAME='ACCOUNTING';
    )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    4.删除的易错点

    (1)违反完整性约束条件

    在这里插入图片描述

    (2)DELETE不支持CASCADE

    在这里插入图片描述


    总结

    文章的不妥之处请各位读者包涵指正。
    了解SQL语言的基础知识可以参考:
    SQL语言概述与SQL语言的数据定义
    SQL语言—数据的查询

  • 相关阅读:
    【Python养成】:案例(身高体重BMI值、模拟用户登录系统、键盘录入10个学生的成绩,计算出最高分、最低分和成绩总和、词频统计)
    Vue学习笔记(二)
    周赛361(模拟、枚举、记忆化搜索、统计子数组数目(前缀和+哈希)、LCA应用题)
    SAP ABAP BAPI_SALESORDER_CREATEFROMDAT2 成本中心 kostl
    C语言函数体 计算10个学生的平均成绩
    Vue组合式 api 的常用知识点
    【LeetCode】最大连续 1 的个数
    1.vue3脚手架在vscode下面建立
    SpringBoot集成Shiro
    多元宇宙算法求解多目标优化问题附matlab代码(Multi-VerseOptimizer,MVO)
  • 原文地址:https://blog.csdn.net/weixin_52042488/article/details/127128249