插入到表名(列值)后跟一个查询语句的话就代表值,简单的说就是后面select select出来的值就是要插入的值,即  
insert into tb(字段名一,字段名二)select 字段名一,字段名二 from tb

等于
insert into tb(字段名一,字段名二)values(查出的字段值一,查出来的字段值一);

  1. 插入到表名(列值)后跟一个查询语句的话就代表值,简单的说就是后面select select出来的值就是要插入的值,即
  2. insert into tb(字段名一,字段名二)select 字段名一,字段名二 from tb
  3.  
  4. 等于
  5. insert into tb(字段名一,字段名二)values(查出的字段值一,查出来的字段值一);

  1. 插入到表名(列值)后跟一个查询语句的话就代表值,简单的说就是后面select select出来的值就是要插入的值,即
  2. insert into tb(字段名一,字段名二)select 字段名一,字段名二 from tb
  3.  
  4. 等于
  5. insert into tb(字段名一,字段名二)values(查出的字段值一,查出来的字段值一);
  1. 在上面的SQL语句中:执行的原理解析:
  2. teacher表中不存在id=3的那条记录,则生成要插入表中的数据并插入表;
  3. teacher表中存在id=3的那条记录,则不生成要插入表中的数据。
  4. 其实程序可以分开看:
  5. select * from teacher where id=3 若查询有值,则表示真,即存在id=3这条记录,若查询没有值则表示假,即不存在id=3这条记录,
  6. ②若果不存在id=3这条记录,那么又因为 not exists 本身表示假,即不存在的意思;假假为真,所以此时程序可以形象的理解为
  7. select 3,'丁老师',5000 from teacher where not exists (false) limit 1;
  8. 等价于
  9. select 3,'丁老师',5000 from teacher where true limit 1;
  10. ③所以程序就会生成一行为 3,'丁老师',5000的记录
  11. ④最后生成的数据就会插入表中
  1. CREATE TABLE tb ( a int, b int );
  2.  
  3. -- 一次插入一行数据的写法: 必须要有 VALUES
  4. INSERT INTO tb VALUES(1, 2);
  5. INSERT INTO tb VALUES(1, 3);
  6. GO
  7.  
  8. -- 一次插入一行或者多行数据的写法: 必须要有 SELECT
  9. INSERT INTO tb SELECT 2, 1;
  10.  
  11. INSERT INTO tb
  12. SELECT 3, 1 UNION ALL
  13. SELECT 3, 2 UNION ALL
  14. SELECT 3, 3;
  15. GO
  16.  
  17. -- 核对数据
  18. SELECT * FROM tb
  19. GO
  20.  
  21. a b
  22. ----------- -----------
  23. 1 2
  24. 1 3
  25. 2 1
  26. 3 1
  27. 3 2
  28. 3 3
  29.  
  30. (6 行受影响)

批量判重插入

  1. <sql id="Base_Column_List1" >
  2. uuid, systemName, enviromentType, jobOrderNum, jobName, executeTime, jobLogAddress, status
  3. </sql>
  4. <insert id="insertDatas" parameterType="cn.lz.devops.model.DataCollectionJobInfo" >
  5. insert into data_collection_job_info
  6. <trim prefix="(" suffix=")" suffixOverrides="," >
  7. <include refid="Base_Column_List1" />
  8. </trim>
  9. <foreach collection="list" item="item" separator="UNION ALL" close=";">
  10. <trim prefix="(" suffix=")" suffixOverrides="UNION ALL" >
  11. select
  12. <trim suffixOverrides="," >
  13. #{item.uuid,jdbcType=VARCHAR},
  14. #{item.systemName,jdbcType=VARCHAR},
  15. #{item.enviromentType,jdbcType=VARCHAR},
  16. #{item.jobOrderNum,jdbcType=INTEGER},
  17. #{item.jobName,jdbcType=VARCHAR},
  18. #{item.executeTime,jdbcType=VARCHAR},
  19. #{item.jobLogAddress,jdbcType=VARCHAR},
  20. #{item.status,jdbcType=INTEGER}
  21. </trim>
  22. from data_collection_job_info
  23. where not exists(select * from data_collection_job_info where uuid=#{item.uuid, jdbcType=VARCHAR}) limit 1
  24. </trim>
  25. </foreach>
  26. </insert>

sql里面插入语句insert后面的values关键字可省略的更多相关文章

  1. Sqlite—插入语句(Insert)

    SQLite 的 INSERT INTO 语句用于向数据库的某个表中添加新的数据行. 基本语法:INSERT INTO TABLE_NAME VALUES (value1,value2,value3, ...

  2. mysql语句insert后取到返回的主键id

    Q:   有时候做类似接口里的数据订正,需要取到insert语句返回的id主键,在程序里通过对象返回好取,但是写sql怎么取到呢? A:  用select @@identity得到上一次插入记录时自动 ...

  3. Java学习-057-Jsoup爬虫获取中国所有的三级行政区划数据(二),并生成数据库 SQL 脚本插入语句

    多不废话,直接上马,小主您稳着... package com.fanfengping.zeus.uitl; import com.alibaba.fastjson.JSONObject; import ...

  4. SQL Server插入中文数据后出现乱码

    今天在做项目的过程中遇到如标题的问题,情况如下图: 数据库使用的是SQL Server2012版本,创建表的脚本如下: CREATE TABLE [dbo].[Type](  [TypeId] INT ...

  5. mysql 插入语句

    mysql 插入语句 什么时候用单引号,什么时候不用? 1.先创建一个表 create table user(username varchar(255),age int,marry boolean,b ...

  6. Sql server中用现有表中的数据创建Sql的Insert插入语句

    之前,在Codeproject发表过一篇关于用现有表中数据创建Insert的Sql语句的存储过程,今天将其搬到这里来,注意本存储过程仅适用于SQL SERVER. 介绍 一些时候,你想导出一些现有表中 ...

  7. 小程序实现sql插入语句转换成Laravel迁移语句

    sql的插入语句长这样: INSERT INTO `media` (`MediaID`, `type`, `filename`, `title`) VALUES (1, 'word', 'word1. ...

  8. 比较两个文件不同以及生成SQL插入语句

    Tips 做一个终身学习的人! 日拱一卒,功不唐捐. 今天有个小小的需求,具体需求是这样的: 有两个文本文件,每个文件都有一些字符串文本: 比较第一个文件中,在第二个文件中,不存在的字符串文本: 把这 ...

  9. SQL语句-INSERT语句

    Insert语句 Insert语句三种写法: mysql> desc students; +-------+-------------+------+-----+---------+------ ...

随机推荐

  1. JavaConfig

    Java Config是Spring的一个子项目,它旨在通过Java类的方式提供Bean的定义信息,是Spring4.0的核心功能   普通的POJO只要标注@Configuration注解,就可以为 ...

  2. HashMap(常用)方法个人理解

      Hashmap的存值: public static void main(String[] args) { ///*Integer*/map.put("1", 1);//向map ...

  3. Windbg 调试CPU占用过高

    1.!runaway !runaway命令显示每个线程消费的时间 Bit 0 (0x1) 让调试器显示每个线程消耗的用户模式时间(user time),默认不加就是0x1 Bit 1 (0x2) 显示 ...

  4. System.Drawing.Imaging.ImageFormat.cs

    ylbtech-System.Drawing.Imaging.ImageFormat.cs 1.程序集 System.Drawing, Version=4.0.0.0, Culture=neutral ...

  5. spss进行判别分析步骤_spss判别分析结果解释_spss判别分析案例详解

    spss进行判别分析步骤_spss判别分析结果解释_spss判别分析案例详解 1.Discriminant Analysis判别分析主对话框 如图 1-1 所示 图 1-1 Discriminant ...

  6. F - GCD - Extreme (II) UVA - 11426

    Given the value of N, you will have to find the value of G. The definition of G is given below:

  7. YARN 原理简介

    YARN 组件 参考:Spark on Yarn | Spark,从入门到精通 YARN 采用 Master/Slave结构 ,包含ResourceManager 和 NodeManager Reso ...

  8. Quartz 定时任务配置(spring中)

    <!-- Quartz -->    <bean name="task" class="com.geostar.geosmarter.nodemanag ...

  9. 2_2.springboot2.x配置之自动配置原理

    前言 SpringBoot 自动配置原理: 本文主要分为三大部分: SpringBoot 源码常用注解 SpringBoot 启动过程 SpringBoot 自动配置原理 1. SpringBoot ...

  10. 「APIO 2019」桥梁

    题目 三天终于把\(APIO\)做完了 这题还是比较厉害的,如果不知道这是个分块应该就自闭了 考虑一个非常妙的操作,按照操作分块 我们设一个闸值\(S\),把\(S\)个边权修改操作分成一块,把所有的 ...