oracle中复制表和数据 && 多表插入语句
创建测试表和测试数据
create table test (id number,name varchar(10));
insert into test values(1,'liufang');
insert into test values(2,'xiaozhang');
insert into test values(3,'dawei');
insert into test values(4,'laotan');
insert into test values(5,'laotan');
insert into test values(6,'laotan');
insert into test values(7,'dawei');
1、复制表和表中的数据,我们可以通过下面的语句来实现
(注:复制表不包含默认值和约束等信息,使用下面方法复制表和数据后需要重新见默认值及索引、约束信息等)
create table test2 as select * from test;
也可以待条件去复制
create table test3 as select * from test where name='laotan'
还可以先去定义表,然后再添加数据
create table test2 as select * from test where 2=1;
insert into test2 select * from test;
2、多表插入语句
先指定复制两个测试表(指定列复制)
create table emp1 as select sequen,ename,sal from emp where 1=2;
create table emp2 as select sequen,ename,cid from emp where 1=2;
下面我们使用四种多表插入语句
a、 insert all 无条件插入
insert all
into emp1(sequen,ename,sal) values (sequen,ename,sal)
into emp2(sequen,ename,cid) values (sequen,ename,cid)
select sequen,ename,sal,cid from emp ;
insert all 有条件插入:上面是没有加条件的,同时向表中插入数据,而且两个表的数据条数也一致,下面是加上不同的条件插入
insert all
when sal>=2000 then
into emp1(sequen,ename,sal) values (sequen,ename,sal)
when cid in(1,2) then
into emp2(sequen,ename,cid) values (sequen,ename,cid)
select sequen,ename,sal,cid from emp ;
b、insert first插入(前面根据条件插入后是有相同的数据插入的,如果不想两个表中数据有重复相同的可以使用insert first)
insert first
when sal>=2000 then
into emp1(sequen,ename,sal) values (sequen,ename,sal)
when cid in(1,2) then
into emp2(sequen,ename,cid) values (sequen,ename,cid)
select sequen,ename,sal,cid from emp ;
insert first 语句中,当地一个表符合条件后,的二个表就不在插入对饮的行,表emp1中不会出现和表emp2相同的数据
这就是两种插入方式的不同之处