天天看點

Oracle基礎知識--進階insert語句

以scott使用者下的emp,dept等幾張表作為示範,sqlplus示範。

首先建立兩張空e1, e2:

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> insert into e1 values('test', 2000, to_date('20111111','yyyyMMdd'));

已建立 1 行。
           

2. insert into xxx select xxx from xxx;

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

已建立14行。
           

3. 進階inert語句:将一個查詢語句的結果插入到多張表中。

    1). insert all

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> 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> 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~結束~