频道栏目
首页 > 数据库 > Oracle > 正文
Oracle基础知识--高级insert语句
2011-11-01 17:10:00           
收藏   我要投稿

 

以scott用户下的emp,dept等几张表作为示范,sqlplus演示。

 

 

 

首先创建两张空e1, e2:

 

Sql代码 

SQL> create table e1 as select ename, sal, hiredate from emp where 1=2;  

 

表已创建。  

 

SQL> create table e2 as select ename, deptno, mgr from emp where 1=2;  

 

表已创建。 

 

SQL> create table e1 as select ename, sal, hiredate from emp where 1=2;

 

表已创建。

 

SQL> create table e2 as select ename, deptno, mgr from emp where 1=2;

 

表已创建。

 

oracle向表里插入数据有很多种方法

 

1. insert into xxx values(xxx);

 

Sql代码 

SQL> insert into e1 values('test', 2000, to_date('20111111','yyyyMMdd'));  

 

已创建1 行。 

 

SQL> insert into e1 values('test', 2000, to_date('20111111','yyyyMMdd'));

 

已创建1 行。

 

2. insert into xxx select xxx from xxx;

 

Sql代码 

SQL> insert into e1 select ename, sal, hiredate from emp;  

 

已创建14行。 

 

SQL> insert into e1 select ename, sal, hiredate from emp;

 

已创建14行。

 

3. 高级inert语句:将一个查询语句的结果插入到多张表中。

 

    1). insert all

 

Sql代码 

SQL> insert all 

  2  into e1 values(ename, sal, hiredate)  

  3  into e2 values(ename, deptno, mgr)  

  4  select * from emp;  

 

已创建28行。 

 

SQL> insert all

  2  into e1 values(ename, sal, hiredate)

  3  into e2 values(ename, deptno, mgr)

  4  select * from emp;

 

已创建28行。    即将查询结果的每一行都插入到e1,e2表中。select * from emp 一共14行数据,所以共插入28行。

 

  

 

    2). insert first

 

Sql代码 

SQL> insert first 

  2  when sal > 2500 then 

  3  into e1 values(ename, sal, hiredate)  

  4  when sal >1000 then 

  5  into e2 values(ename, deptno, mgr)  

  6  select * from emp;  

 

已创建12行。 

 

SQL> insert first

  2  when sal > 2500 then

  3  into e1 values(ename, sal, hiredate)

  4  when sal >1000 then

  5  into e2 values(ename, deptno, mgr)

  6  select * from emp;

 

已创建12行。    查询结果的一行只能插入到一张表,即使两张表的条件都符合。写在前面的条件优先插入...可以继续测试一下:

 

Sql代码 

SQL> delete from e1;  

 

已删除5行。  

 

SQL> delete from e2;  

 

已删除7行。  

 

SQL> insert first 

  2  when sal > 1000 then 

  3  into e1 values(ename, sal, hiredate)  

  4  when sal > 2000 then 

  5  into e2 values(ename, deptno, mgr)  

  6  select * from emp;  

 

已创建12行。  

 

SQL> select count(1) from e1;  

 

  COUNT(1)  

----------  

        12  

 

SQL> select count(1) from e2;  

 

  COUNT(1)  

----------  

         0 

 

SQL> delete from e1;

 

已删除5行。

 

SQL> delete from e2;

 

已删除7行。

 

SQL> insert first

  2  when sal > 1000 then

  3  into e1 values(ename, sal, hiredate)

  4  when sal > 2000 then

  5  into e2 values(ename, deptno, mgr)

  6  select * from emp;

 

已创建12行。

 

SQL> select count(1) from e1;

 

  COUNT(1)

----------

        12

 

SQL> select count(1) from e2;

 

  COUNT(1)

----------

         0

 

    可以看到,e2表中没有插入任何行,因为满足第二个条件的行都满足第一条件,所以都插入到e1中了。所以需要在书写条件的时候注意了...

 

 

 

    OK~结束~

作者:firecym

点击复制链接 与好友分享!回本站首页
相关TAG标签 语句 基础知识
上一篇:Oracle并行操作——并行DML操作
下一篇:oracle IMP-00008 错误
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站