1. 程式人生 > >sql裏面插入語句insert後面的values關鍵字可省略

sql裏面插入語句insert後面的values關鍵字可省略

table 就會 tty bin lse span exists name etime

插入到表名(列值)後跟一個查詢語句的話就代表值,簡單的說就是後面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關鍵字可省略