zoukankan      html  css  js  c++  java
  • [SQL]数据更新

    插入数据

    插入单个元组

    一般格式:

    insert 
    into <表名> [<列名1>, <列明2>, ……] -- 指出在表中新插入的值的列,
    values(<常量1>, <常量2>, ……) -- 指出在表中插入新值的列的具体值
    
    • values 语句中各常量数据类型必须与 into 子句中对应列的数据类型兼容,且常量的数量必须与 into 子句中的列数相同。
    • into 子句中没有出现的列,新插入的元组在这些列上去空值。
    • 如果 into 子句省略指定插入新值的列,则新插入元组的每一列必须在 values 子句中均有值对应。
    • 如果某列定义为 not null,则该列的值必须出现在 values 子句中的常量列表中。
    • 这种方法一次只能插入一行数据。
    1. 栗子1:将一个新图书元组插入到图书表中。

      insert into 图书
      values('A019', '数据库', '王珊', '高等教育出版社', 33.8)
      

      本例中省略了 into 子句中的列名列表,因此 values 子句中常量的数据类型及个数必须与图书基本表中各列数据类型和个数匹配。

    2. 栗子2:插入一条借阅记录('140128', 'A002')

      insert
      into 借阅 (读者编号, 图书号)
      values ('140128', 'A002')
      

      也可写成:

      insert into 借阅
      values ('140128', 'A002', NULL, NULL)
      

    插入子查询结果

    可以使用 select 语句查询出的结果代替 values 子句,一次向基本表中插入多个元组。

    一般格式为:

    insert 
    into <表名> [<列名1>, <列明2>, ……]
    <子查询>
    
    • <子查询>结果集合中的列数、列序和数据类型必须与<表名>所指的基本表中相应各项匹配或兼容。

    栗子:求各个出版社图书的总数并存放与一张新表 CBS中。

    1. 建表:

      create table CBS
      (出版社 varchar(15), 总数 int)
      
    2. 插入:

      insert
      into CSB (出版社, 总数)
      	select 出版社, count(*)
      	from 图书
      	group by 出版社
      

    修改数据

    一般格式:

    update <表名>
    set <列名> = <表达式> [, <列名> = <表达式>]……
    [where <条件>] -- 如果省略该子句,则修改基本表中的所有元组
    

    修改某一个元组的值

    将 A002 号图书的单价改为 28:

    update 图书
    set 单价 = 28
    where 图书号 = 'A002'
    

    修改多个元组的值

    将多有图书单价减一元:

    update 图书
    set 单价 = 单价 - 1
    

    带子查询的修改语句

    将读者李明的所有借阅记录的借阅日期置为系统当前日期,还书日期置为 NULL:

    update 借阅
    set 借阅日期=getdate(), 还书日期=NULL
    where '李明' = 
    	(
        	select 读者姓名
            from 读者
            where 借阅.读者编号 = 读者.读者编号
        )
    

    等价于:

    update 借阅
    set 借阅日期=getdate(), 还书日期=NULL
    where 读者编号 in
    	(
        	select 读者编号
            from 读者
            where 读者姓名='李明'
        )
    

    删除数据

    一般格式:

    delete from <表名>
    [where <条件>]
    

    删除满足 where 子句条件的所有元组。

    • delete 删除的是基本表中的数据,而不是表的定义。
    • 省略 where 子句将删除所有元组。
    • 在 where 子句中也可以嵌入子查询。
    • 数据一旦被删除将无法恢复,除非有备份。

    删除某一个元组的值

    将 A002 号图书记录删除:

    delete from 图书
    where 图书号='A002'
    

    删除多个元组的值

    delete from 借阅
    

    将借阅表中的所有元组都删除了,但是这个表还在,只是成了空表。

    带子查询的删除语句

    删除莫言所编写的图书的所有借阅记录:

    delete from 借阅
    where '莫言' = (
    	select 主编 from 图书
        where 借阅.图书号 = 图书.图书号
    )
    

    等价于:

    delete from 借阅
    where 图书号 in (
    	select 图书号 from 图书
        where 主编 = '莫言'
    )
    
  • 相关阅读:
    SpringBoot2.0 整合 Dubbo框架 ,实现RPC服务远程调用
    Spark家族:Win10系统下搭建Scala开发环境
    Linux系统:centos7下搭建Rocketmq4.3中间件,配置监控台
    Linux系统:Centos7环境搭建Redis单台和哨兵集群环境
    Linux系统:常用Linux系统管理命令总结
    Linux系统:centos7下安装Jdk8、Tomcat8、MySQL5.7环境
    Linux系统:centos7下搭建ZooKeeper3.4中间件,常用命令总结
    SpringBoot2.0 整合 Redis集群 ,实现消息队列场景
    SpringBoot2.0 基础案例(17):自定义启动页,项目打包和指定运行环境
    SpringBoot2.0 基础案例(16):配置Actuator组件,实现系统监控
  • 原文地址:https://www.cnblogs.com/xxmmqg/p/13751310.html
Copyright © 2011-2022 走看看