sql里面插入语句insert后面的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(查出的字段值一,查出来的字段值一);
或
插入到表名(列值)后跟一个查询语句的话就代表值,简单的说就是后面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关键字可省略的更多相关文章
- Sqlite—插入语句(Insert)
SQLite 的 INSERT INTO 语句用于向数据库的某个表中添加新的数据行. 基本语法:INSERT INTO TABLE_NAME VALUES (value1,value2,value3, ...
- mysql语句insert后取到返回的主键id
Q: 有时候做类似接口里的数据订正,需要取到insert语句返回的id主键,在程序里通过对象返回好取,但是写sql怎么取到呢? A: 用select @@identity得到上一次插入记录时自动 ...
- Java学习-057-Jsoup爬虫获取中国所有的三级行政区划数据(二),并生成数据库 SQL 脚本插入语句
多不废话,直接上马,小主您稳着... package com.fanfengping.zeus.uitl; import com.alibaba.fastjson.JSONObject; import ...
- SQL Server插入中文数据后出现乱码
今天在做项目的过程中遇到如标题的问题,情况如下图: 数据库使用的是SQL Server2012版本,创建表的脚本如下: CREATE TABLE [dbo].[Type]( [TypeId] INT ...
- mysql 插入语句
mysql 插入语句 什么时候用单引号,什么时候不用? 1.先创建一个表 create table user(username varchar(255),age int,marry boolean,b ...
- Sql server中用现有表中的数据创建Sql的Insert插入语句
之前,在Codeproject发表过一篇关于用现有表中数据创建Insert的Sql语句的存储过程,今天将其搬到这里来,注意本存储过程仅适用于SQL SERVER. 介绍 一些时候,你想导出一些现有表中 ...
- 小程序实现sql插入语句转换成Laravel迁移语句
sql的插入语句长这样: INSERT INTO `media` (`MediaID`, `type`, `filename`, `title`) VALUES (1, 'word', 'word1. ...
- 比较两个文件不同以及生成SQL插入语句
Tips 做一个终身学习的人! 日拱一卒,功不唐捐. 今天有个小小的需求,具体需求是这样的: 有两个文本文件,每个文件都有一些字符串文本: 比较第一个文件中,在第二个文件中,不存在的字符串文本: 把这 ...
- SQL语句-INSERT语句
Insert语句 Insert语句三种写法: mysql> desc students; +-------+-------------+------+-----+---------+------ ...
随机推荐
- bootstrap 幻灯片(轮播)
<!DOCTYPE html><html><head> <meta charset="utf-8"> <titl ...
- Python 输入字符串找(String)下标 没有返回-1
str = "abcdefg123456"a = input("请输入一个字母或数字:")num = 0result = -1while num < le ...
- 视频云肖长杰:视频AI科技助力短视频生态
人工智能技术是当今炙手可热的技术领域,它在制造.家居.零售.交通.安防等行业的应用已经是大势所趋.在本月云栖Techday音视频技术沙龙中,阿里云视频云产品专家肖长杰为我们分享了一些AI技术在视频中应 ...
- thjinkphp 变量调试
输出某个变量是开发过程中经常会用到的调试方法,除了使用php内置的var_dump和print_r之外,ThinkPHP框架内置了一个对浏览器友好的dump方法,用于输出变量的信息到浏览器查看. 大理 ...
- thinkphp 变量输出
在模板中输出变量的方法很简单,例如,在控制器中我们给模板变量赋值: 大理石平台支架 $name = 'ThinkPHP'; $this->assign('name',$name); $this- ...
- jdk配置到tomcat配置
1.jdk配置 首先下载jdk 这里我下载的是 jdk1.8 (jdk1.8.0_181\) 然后,安装 我的安装路径 C:\Program Files\Java\jdk1.8.0_181\ 我选择默 ...
- Hadoop 平台搭建
一.在Linux中安装JDK并配置环境变量 输入javac 查看是否已安装java环境如果没有安装 sudo apt-get install openjdk-7-jdk再次检测 javac修改配置参数 ...
- spss进行判别分析步骤_spss判别分析结果解释_spss判别分析案例详解
spss进行判别分析步骤_spss判别分析结果解释_spss判别分析案例详解 1.Discriminant Analysis判别分析主对话框 如图 1-1 所示 图 1-1 Discriminant ...
- Python机器学习的步骤
原文出处: kdnuggets 译文出处:数据工匠 开始.这是最容易令人丧失斗志的两个字.迈出第一步通常最艰难.当可以选择的方向太多时,就更让人两腿发软了. 从哪里开始? 本文旨在通过七个步骤,使 ...
- java中字符数组与字符串之间互相转换的方法
public static void main(String[] args) { //1.字符数组 转换成 字符串 //(1)直接在构造String时转换 char[] array = new cha ...