一歩一歩ORACLEワールドを攻める(四)


この説明では、DML文について説明します.
INSERT:文の挿入
UPDATE:更新文
DELETE:文の削除
DML:Data Manipulation Languageデータ操作言語とは!専門的ですね.
(1)操作文の挿入
注意事项、具体的な文法はすべて文がしわだらけで、话さないで、见ると分かります!しかし、注意してください.
数字の列を挿入するには、純粋な数字をそのまま使用し、文字列と日付には単一引用符を使用します.
例1.列を指定しない場合は、すべての列にデータを指定する必要があります.

    
    
    
    
  1. SQL> insert into dept values(50,'TRAIN','BOSTON');   
  2. 1 row inserted  
  3. SQL>  select * from dept where deptno=50;  
  4. DEPTNO DNAME          LOC  
  5. ------ -------------- -------------   
  6. 50       TRAIN          BOSTON  
     2.        

   

    
    
    
    
  1. SQL> insert into emp(empno,ename,job,hiredate) value(1234,'JONY','CLERK','01-3 -86');    
  2.  1 row inserted  
  3.  SQL> select * from emp where empno=1234;  
  4.  EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO  
  5. ----- ---------- --------- ----- ----------- --------- --------- ------  
  6.  1234 JONY       CLERK           1986/3/1  

例3.指定したフォーマットの日付列挿入データ
 

    
    
    
    
  1. SQL> insert into emp(empno,ename,job,hiredate)values(1256,'TYYK','CLERK',to_date('2012-11-12','YYYY-MM-DD'));  
  2.    
  3. 1 row inserted  
  4.    
  5. SQL> select * from emp where empno=1256;  
  6.    
  7. EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO  
  8. ----- ---------- --------- ----- ----------- --------- --------- ------  
  9.  1256 TYYK       CLERK           2012/11/12                        

 
特に注意してto_to_ではなくdate()char()は,前者が挿入日付フォーマットであり,後者が一般的に表示に用いられる.
同時に検索した結果が「YYYY-MM-DD」形式ではないことを発見し、点解?実は私が使っているツールが日付の表示方法を設定しただけです.
例4.デフォルトdefault挿入データ

    
    
    
    
  1. SQL> insert into dept values(60,'MARKET',DEFAULT);  
  2.  
  3.  row inserted  
  4.  
  5. SQL> select * from dept where deptno=60;  
  6.    
  7. EPTNO DNAME          LOC  
  8. ------ -------------- -------------  
  9. 0    MARKET  
     default    ,  NULL。

小結:文を挿入するときは、列を挿入する順序に注意してください.いくつかのキーワードに注意してください:valueではなくvalues、defaultsではなくdefaults
(2)サブクエリ挿入データ
主な用途は、1つのテーブルのデータが別のテーブルに挿入されることです.
構文:insert into[colunm....]subquery
ここでsubqueryは、指定したターゲットテーブルにデータを提供するサブクエリです.
特に注意:カラム名のデータ型と個数の一致に注意してください.
例1.
 

  
  
  
  
  1. SQL> select * from employee;  
  2.    
  3. DEPTNO EMPNO ENAME            SAL  
  4. ------ ----- ---------- ---------   
  5.  
  6. SQL> select empno,ename,sal,deptno from emp where deptno=20;  
  7.  
  8. EMPNO ENAME            SAL DEPTNO   
  9. ----- ---------- --------- ------   
  10. 7369 SMITH         880.00     20   
  11. 7566 JONES        3272.50     20  
  12. 7788 SCOTT        2706.00     20    
  13. 7876 ADAMS        1210.00     20    
  14. 7902 FORD         3300.00     20   
  15.  
  16. SQL> insert into employee(empno,ename,sal,deptno)  
  17.     2 select empno,ename,sal,deptno from emp   
  18.     3  where deptno=20;   
  19.    
  20.  5 rows inserted    
  21.  
  22. SQL> select * from employee;  
  23.    
  24. DEPTNO EMPNO ENAME            SAL   
  25. ------ ----- ---------- ---------   
  26. 20  7369 SMITH         880.00    
  27. 20  7566 JONES        3272.50   
  28. 20  7788 SCOTT        2706.00   
  29. 20  7876 ADAMS        1210.00   
  30. 20  7902 FORD         3300.00 

例2.

    
    
    
    
  1. SQL> insert /*+append*/ into employee(empno,ename,sal,deptno)  
  2.  2  select empno,ename,sal,deptno from emp  
  3.  3  where deptno=20;  
  4.     
  5. rows inserted  
  6.  
              ,        ,/*+append*/     。

(3)マルチテーブル挿入
すなわち、1枚のテーブルのデータが複数のテーブルに挿入される.
まず、いくつかのテーブルを作成します.
  

  
  
  
  
  1. SQL> create table dept10(DEPTNO NUMBER(2) ,DNAME  VARCHAR2(14),LOC    VARCHAR2(13));  
  2.    
  3. Table created  
  4.    
  5. SQL> create table dept20(DEPTNO NUMBER(2) ,DNAME  VARCHAR2(14),LOC    VARCHAR2(13));  
  6.    
  7. Table created  
  8.    
  9. SQL> create table dept30(DEPTNO NUMBER(2) ,DNAME  VARCHAR2(14),LOC    VARCHAR2(13));  
  10.    
  11. Table created  
  12.    
  13. SQL> create table other(DEPTNO NUMBER(2) ,DNAME  VARCHAR2(14),LOC    VARCHAR2(13));  
  14.    
  15. Table created  

例1.allマルチテーブル挿入データ
 

  
  
  
  
  1. SQL> insert all 
  2. 2  when deptno=10 then into dept10  
  3. 3  when deptno=20 then into dept20  
  4. 4  when deptno=30 then into dept30  
  5. 5  else into other  
  6. 6  select * from dept;  
  7.  
  8. rows inserted  
  9.  
  10. SQL> select * from dept10;  
  11.    
  12. DEPTNO DNAME          LOC  
  13.  ------ -------------- -------------  
  14.  10 ACCOUNTING     NEW YORK 

all挿入方式を使用すると、重複する可能性があります.次のようになります.
 

  
  
  
  
  1.   SQL> insert all 
  2.     2   when deptno=10 then into dept10  
  3.     3  when  dname='ACCOUNTING' then into dept10  
  4.     4  when deptno=20 then into dept20  
  5.     5  else into other  
  6.     6  select * from dept;  
  7.     
  8. rows inserted  
  9.      
  10. SQL> select * from dept10;  
  11.     
  12.  DEPTNO DNAME          LOC  
  13.  ------ -------------- -------------  
  14.      10 ACCOUNTING     NEW YORK  
  15.      10 ACCOUNTING     NEW YORK  
  16.      10 ACCOUNTING     NEW YORK  

繰り返し挿入があるのはall挿入方式で、ずっと下に実行され、条件になるたびに挿入されるからです.だからdeptno=10の場合
データを挿入し、dname='ACCOUNTING'に遭遇したときに、この重複したデータを再び挿入します.
例2.firstマルチテーブル挿入データ
以前の条件を満たし、データベースに挿入され、現在の条件も満たされているのに、データベースに繰り返し挿入したくない場合はfirstが機能します.
簡単に言えばfirstは重複挿入を許さない.
 

  
  
  
  
  1. SQL> insert first 
  2.   2  when  deptno=10 then into dept10  
  3.   3  when  deptno=20 then into dept20  
  4.   4  when  dname='ACCOUNTING'then  into dept10  
  5.   5  else into other  
  6.   6  select * from dept;  
  7.    
  8. rows inserted  
  9.    
  10. SQL> select * from dept10;  
  11.  
  12. DEPTNO DNAME          LOC  
  13. ------ -------------- -------------  
  14.     10 ACCOUNTING     NEW YORK  
  15.  

以上の結果から,deptno=10を満たし,dname='ACCOUNTING'も満たすが,1つのデータのみを挿入する.