程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> 多表插入語句,表插入語句

多表插入語句,表插入語句

編輯:Oracle教程

多表插入語句,表插入語句


多表插入語句分為以下四種:

①無條件INSERT。

②有條件INSERT ALL。

③轉置INSERT。

④有條件INSERT FIRST。

首先創建測試用表:

CREATE TABLE emp(
    empno NUMBER(4),
    ename VARCHAR2(10),
    job VARCHAR2(9),
    deptno NUMBER(2)
);

INSERT INTO emp VALUES(7500, 'A', 'SALESMAN', 10);
INSERT INTO emp VALUES(7501, 'B', 'MANAGER', 20);
INSERT INTO emp VALUES(7502, 'C', 'CLERK', 30);
INSERT INTO emp VALUES(7503, 'D', 'CLERK', 10);
INSERT INTO emp VALUES(7504, 'E', 'SALESMAN', 20);
INSERT INTO emp VALUES(7505, 'F', 'MANAGER', 30);

CREATE TABLE emp1 AS SELECT empno, ename, job FROM emp WHERE 1 = 2;
CREATE TABLE emp2 AS SELECT empno, ename, deptno FROM emp WHERE 1 = 2;

SELECT * FROM emp;

查詢語句執行結果如下:

sql代碼如下:

INSERT ALL
    INTO emp1(empno, ename, job) VALUES(empno, ename, job)
    INTO emp2(empno, ename, deptno) VALUES(empno, ename, deptno)
SELECT empno, ename, job, deptno FROM emp WHERE deptno = 10;

SELECT * FROM emp1;
SELECT * FROM emp2;

第一條查詢語句的執行結果如下:

第二條查詢語句的執行結果如下:

  

因為沒有加條件,所以會同時向兩個表中插入數據,且兩個表中插入的條數一樣。

二.有條件INSERT ALL

 sql代碼如下:

DELETE emp1;
DELETE emp2;

INSERT ALL
    WHEN job IN ('SALESMAN', 'MANAGER') THEN
    INTO emp1(empno, ename, job) VALUES(empno, ename, job)
    WHEN deptno IN (10, 20) THEN
    INTO emp2(empno, ename, deptno) VALUES(empno, ename, deptno)
SELECT empno, ename, job, deptno FROM emp;

SELECT * FROM emp1;
SELECT * FROM emp2;

第一條查詢語句的執行結果如下:

第二條查詢語句的執行結果如下:

當增加條件後,就會按條件插入,如EMPNO=7500等數據在兩個表中都有。

三.有條件INSERT FIRST

sql代碼如下:

DELETE emp1;
DELETE emp2;

INSERT FIRST
    WHEN job IN ('SALESMAN', 'MANAGER') THEN
    INTO emp1(empno, ename, job) VALUES(empno, ename, job)
    WHEN deptno IN (10, 20) THEN
    INTO emp2(empno, ename, deptno) VALUES(empno, ename, deptno)
SELECT empno, ename, job, deptno FROM emp;

SELECT * FROM emp1;
SELECT * FROM emp2;

第一條查詢語句的執行結果如下:

第二條查詢語句的執行結果如下:

INSERT FIRST語句中,當第一個表符合條件後,第二個表將不再插入對應的行,表emp2中不再有與表emp1相同的數據,這就是INSERT FIRST 與 INSERT ALL的不同之處。

四.轉置INSERT

轉置INSERT與其說是一個分類,不如算作“INSERT ALL”的一個用法。

創建測試用表:

CREATE TABLE t1 (
    c1 VARCHAR2(10),
    c2 VARCHAR2(10)
);
CREATE TABLE t2 AS
SELECT 'A' AS d1,
       'B' AS d2,
       'C' AS d3
  FROM DUAL;

sql代碼如下:

INSERT ALL
    INTO t1(c1, c2) VALUES('1', d1)
    INTO t1(c1, c2) VALUES('2', d2)
    INTO t1(c1, c2) VALUES('3', d3)
SELECT d1, d2, d3 FROM t2;

SELECT * FROM t1;

查詢語句執行結果如下:

可以看到,裝置INSERT的實質就是把不同列的數據插入到同一個表的不同行中。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved