zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    Android之json解析
    关闭Android/iPhone浏览器自动识别数字为电话号码
    CSS 公共样式摘自万能的度娘
    前端必备:六款CSS工具让代码充满魅力
    移动端JS 触摸事件基础
    height:100%和height:auto的区别
    线程之生产汽车与购买汽车
    SAXCreateXMLDocument
    DOM方式创建XML文件
    java快捷键
  • 原文地址:https://www.cnblogs.com/h-c-g/p/10672845.html
Copyright © 2011-2022 走看看