使用一條INSERT語句完成多表插入

2021-06-10 10:27:46 字數 3254 閱讀 6192

這是一條顛覆常規的插入方法,一條insert語句可以完成向多張表的插入任務。小小地展示一下這種插入方法。

1.建立表t並初始化測試資料,此表作為資料來源。

sec@ora10g> create table t (x number(10), y varchar2(10));

sec@ora10g> insert into t values (1,'a');

sec@ora10g> insert into t values (2,'b');

sec@ora10g> insert into t values (3,'c');

sec@ora10g> insert into t values (4,'d');

sec@ora10g> insert into t values (5,'e');

sec@ora10g> insert into t values (6,'f');

sec@ora10g> commit;

2.檢視表t的資料

sec@ora10g> select * from t;

x y---------- ----------

1 a2 b

3 c4 d

5 e6 f

6 rows selected.

3.建立表t1和t2,作為我們要插入的目標表。

sec@ora10g> create table t1 as select * from t where 0=1;

table created.

sec@ora10g> create table t2 as select * from t where 0=1;

table created.

4.第一種多表插入方法insert all

1)完成insert all插入

sec@ora10g> insert all into t1 into t2 select * from t;

12 rows created.

這裡之所以顯示插入了12條資料,實際上表示在t1表中插入了6條,t2表插入了6條,一共是12條資料。

2)驗證t1表中被插入的資料。

sec@ora10g> select * from t1;

x y---------- ----------

1 a2 b

3 c4 d

5 e6 f

6 rows selected.

3)驗證t2表中被插入的資料。

sec@ora10g> select * from t2;

x y---------- ----------

1 a2 b

3 c4 d

5 e6 f

6 rows selected.

ok,完成insert all命令的使命。

5.第二種多表插入方法insert first

1)清空表t1和t2

sec@ora10g> delete from t1;

sec@ora10g> delete from t2;

sec@ora10g> commit;

2)完成insert first插入

sec@ora10g> insert first when x>=5 then into t1 when x>=2 then into t2 select * from t;

5 rows created.

處理邏輯是這樣的,首先檢索t表查詢x列值大於等於5的資料(這裡是「5,e」和「6,f」)插入到t1表,然後將前乙個查詢中出現的資料排除後再查詢t表,找到x列值大於等於2的資料再插入到t2表(這裡是「2,b」、「3,c」和「4,d」)。注意insert first的真正目的是將同樣的資料只插入一次。

3)驗證t1表中被插入的資料。

sec@ora10g> select * from t1;

x y---------- ----------

5 e6 f

4)驗證t2表中被插入的資料。

sec@ora10g> select * from t2;

x y---------- ----------

2 b3 c

4 d5)為真實的反映「資料只插入一次」的目的,我們把條件顛倒後再插入一次。

sec@ora10g> delete from t1;

sec@ora10g> delete from t2;

sec@ora10g> insert first when x>=2 then into t1 when x>=5 then into t2 select * from t;

5 rows created.

sec@ora10g> select * from t1;

x y---------- ----------

2 b3 c

4 d5 e

6 fsec@ora10g> select * from t2;

no rows selected

ok,目的達到,可見滿足第二個條件的資料已經包含在第乙個條件裡,所以不會有資料插入到第二張表。

同樣的插入條件,我們把「insert first」換成「insert all」,對比一下結果。

sec@ora10g> delete from t1;

5 rows deleted.

sec@ora10g> delete from t2;

0 rows deleted.

sec@ora10g> insert all when x>=2 then into t1 when x>=5 then into t2 select * from t;

7 rows created.

sec@ora10g> select * from t1;

x y---------- ----------

2 b3 c

4 d5 e

6 fsec@ora10g> select * from t2;

x y---------- ----------

5 e6 f

是不是在豁然開朗的基礎上又有一種錦上添花的感覺。that's it.

6.oralce官方文件參考鏈結

7.小結

這些小小小的高階sql

技巧在實際的應用中有很大用處。慢慢體會吧。

good luck.

secooler

10.01.06

-- the end --

SQL 使用一條INSERT語句完成多表插入

這是一條顛覆常規的插入方法,一條insert語句可以完成向多張表的插入任務。小小地展示一下這種插入方法。1.建立表t並初始化測試資料,此表作為資料來源。sec ora10g create table t x number 10 y varchar2 10 sec ora10g insert into...

一條insert語句批量插入多條記錄

常見的insert語句,向資料庫中,一條語句只能插入一條資料 一條insert只能插入一條資料 insert into person id,personcode,personname telnumber values 1,5112403 張三 1378902134 一次插入多條資料的方法 方式一 i...

一條insert語句批量插入多條記錄

一條insert語句批量插入多條記錄 常見的insert語句,向資料庫中,一條語句只能插入一條資料 insert into persons id p,lastname firstname,city values 204,haha deng shenzhen 如上,僅插入了一條記錄 怎樣一次inser...