值是可以省略的
插入到表名(列值)後跟乙個查詢語句的話就代表值,簡單的說就是後面select select出來的值就是要插入的值,即
insert into tb(欄位名一,欄位名二)select 欄位名一,欄位名二 from tb
等於insert into tb(欄位名一,欄位名二)values(查出的字段值一,查出來的字段值一);
例子:插入一行id = 3,名字=丁老師,薪水= 5000的記錄
或者
insert
into
teacher(id,name,salary)
select
3, '丁老師'
, 5000
from
teacher
where
notexists
( select
* from
teacher
where
id=3
) limit1;
insert
into
teacher(id,name,salary)
( select
4,'白老師'
,4000
from
teacher
where
notexists
(select
* from
teacher where
id=4
) limit1);
在上面的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
notexists
(false
) limit1;
等價於select
3,'丁老師'
,5000
from
teacher where
true
limit1;
③所以程式就會生成一行為 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 行受影響)
批量判重插入
id="base_column_list1" >
uuid, systemname, enviromenttype, jobordernum, jobname, executetime, joblogaddress, status
sql>
id="insertdatas"
parametertype="cn.lz.devops.model.datacollectionjobinfo" >
insert into data_collection_job_info
prefix="("
suffix=")"
suffixoverrides="," >
refid="base_column_list1" />
trim>
collection="list"
item="item"
separator="union all"
close=";">
prefix="("
suffix=")"
suffixoverrides="union all" >
select
suffixoverrides="," >
#,#,
#,#,
#,#,#,#
trim>
from data_collection_job_info
where not exists(select * from data_collection_job_info where uuid=#) limit 1
trim>
foreach>
insert>
批量插入資料 Oracle
在使用 oracle 開發期間,或許我們會為編寫一條一條插入語句而困惱,這裡給出 對資料表進行簡單批量插入的例子。以下均是oracle 資料庫操作 insert into cbay user t userid,username,password,userage select test1 test1 ...
Oracle批量插入資料
insert all into tab id,name values 1,amy into tab id,name values 2,tom into tab id,name values 3,jerry select 1 from dual insert all不支援生產id declare i ...
Oracle資料的批量插入
前兩天接到乙個需求 需要程式設計將sql server中的資料插入至oracle。資料大約有20多萬條記錄。開始的時候我採取了直接構建sql插入的方式,結果耗時太長。為了提高效能我上網找了資料。最終採用dataadapter批量插入至oracle,提高了效能。如下 一,直接構建sql語句插入 vb....