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

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

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

插入到表名(列值)后跟一个查询语句的话就代表值,简单的说就是后面select select出来的值就是要插入的值,即
insert into tb(字段名一,字段名二)select 字段名一,字段名二 from tb 等于
insert into tb(字段名一,字段名二)values(查出的字段值一,查出来的字段值一);
在上面的SQL语句中:执行的原理解析:
若teacher表中不存在id=3的那条记录,则生成要插入表中的数据并插入表;
若teacher表中存在id=3的那条记录,则不生成要插入表中的数据。
其实程序可以分开看:
① select * from teacher where id=3 若查询有值,则表示真,即存在id=3这条记录,若查询没有值则表示假,即不存在id=3这条记录,
②若果不存在id=3这条记录,那么又因为 not exists 本身表示假,即不存在的意思;假假为真,所以此时程序可以形象的理解为
select 3,'丁老师',5000 from teacher where not exists (false) limit 1;
等价于
select 3,'丁老师',5000 from teacher where true limit 1;
③所以程序就会生成一行为 3,'丁老师',5000的记录
④最后生成的数据就会插入表中
CREATE TABLE tb ( a int,  b  int );

-- 一次插入一行数据的写法: 必须要有  VALUES
INSERT INTO tb VALUES(1, 2);
INSERT INTO tb VALUES(1, 3);
GO -- 一次插入一行或者多行数据的写法: 必须要有 SELECT
INSERT INTO tb SELECT 2, 1; INSERT INTO tb
SELECT 3, 1 UNION ALL
SELECT 3, 2 UNION ALL
SELECT 3, 3;
GO -- 核对数据
SELECT * FROM tb
GO a b
----------- -----------
1 2
1 3
2 1
3 1
3 2
3 3 (6 行受影响)

批量判重插入

<sql id="Base_Column_List1" >
uuid, systemName, enviromentType, jobOrderNum, jobName, executeTime, jobLogAddress, status
</sql>
<insert id="insertDatas" parameterType="cn.lz.devops.model.DataCollectionJobInfo" >
insert into data_collection_job_info
<trim prefix="(" suffix=")" suffixOverrides="," >
<include refid="Base_Column_List1" />
</trim>
<foreach collection="list" item="item" separator="UNION ALL" close=";">
<trim prefix="(" suffix=")" suffixOverrides="UNION ALL" >
select
<trim suffixOverrides="," >
#{item.uuid,jdbcType=VARCHAR},
#{item.systemName,jdbcType=VARCHAR},
#{item.enviromentType,jdbcType=VARCHAR},
#{item.jobOrderNum,jdbcType=INTEGER},
#{item.jobName,jdbcType=VARCHAR},
#{item.executeTime,jdbcType=VARCHAR},
#{item.jobLogAddress,jdbcType=VARCHAR},
#{item.status,jdbcType=INTEGER}
</trim>
from data_collection_job_info
where not exists(select * from data_collection_job_info where uuid=#{item.uuid, jdbcType=VARCHAR}) limit 1
</trim>
</foreach>
</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. 笔记23 搭建Spring MVC

    搭建一个最简单的SpringMVC示例 1.配置DispatcherServlet DispatcherServlet是Spring MVC的核心.在这里请求会第一次 接触到框架,它要负责将请求路由到 ...

  2. sql (3) where

    WHERE 子句用于规定选择的标准.语法SELECT 列名称 FROM 表名称 WHERE 列 运算符 值 引号的使用请注意,我们在例子中的条件值周围使用的是单引号. SQL 使用单引号来环绕文本值( ...

  3. Android开发 QRCode二维码开发第三方框架

    前言 Android开发里二维码开发经常用到,这里简单的介绍下Android开发里的二维码. 最广泛使用的二维码库zxing zxing是最广泛的二维码库各个平台都可以适用它,但是Android平台使 ...

  4. css---盒模型新增样式

    box-shadow 以逗号分割列表来描述一个或多个阴影效果,可以用到几乎任何元素上. 如果元素同时设置了 border-radius ,阴影也会有圆角效果.多个阴影时和多个 text shadows ...

  5. php数组的快速排序

    function quick($array){ if(count($array)<=1){ return $array; } $key=$array[0]; $right=array(); $l ...

  6. gevent实现并发

    #_author:来童星#date:2019/12/12import geventimport timedef func1(): print('\033[31;1mfun1 starting...\0 ...

  7. 2019云栖大会开幕,5G边缘计算成首日焦点

    9月25日,全球顶尖科技盛会——2019云栖大会如期上演,1000余位当代技术领军人物与数万名开发者集结杭州,聚焦数字经济,共话面向未来20年的基础科学.科技创新与应用突破.其中,边缘计算技术领域因5 ...

  8. 阿里云 Aliplayer高级功能介绍(三):多字幕

    基本介绍 国际化场景下面,播放器支持多字幕,可以有效解决视频的传播障碍难题,该功能适用于视频内容在全球范围内推广,阿里云的媒体处理服务提供接口可以生成多字幕,现在先看一下具体的效果: WebVTT格式 ...

  9. Java中的栈,堆,方法区和常量池

    要说Java中的栈,堆,方法区和常量池就要提到HotSpot,HotSpot是Sun JDK 和 Open JDK中所带的虚拟机. (Sun JDK 和 Open JDK除了注释不同,代码实现基本上是 ...

  10. python 毫秒时间戳转日期

    import time import datetime timestamp = 1570774556514 # 转换成localtime time_local = time.localtime(tim ...