개발자의 끄적끄적

[sql/oracle] 오라클 다양한 INSERT INTO 방법 본문

개발/sql

[sql/oracle] 오라클 다양한 INSERT INTO 방법

효벨 2020. 8. 1. 03:00
728x90
반응형

[sql/oracle] 오라클 다양한 INSERT INTO 방법

 

 

INSERT문을 사용하면 테이블에 데이터를 입력할 수가 있습니다.

물론 해당테이블에 INSERT 권한이 있어야 입력이 가능합니다.

이 포스팅에서는 다양한 방법으로 INSERT 처리하는 법을 알아보겠습니다.

 

INSERT 문법

INSERT INTO dml_table_expression_clause [ t_alias ]
[ (column [, column ]...) ]
VALUES ({ expr | DEFAULT }
          [, { expr | DEFAULT } ]...
       )

 

INSERT 예제

INSERT INTO EMP e ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO ) VALUES ( '7499','ALLEN','SALESMAN','7698',SYSDATE,'1600','300','30');
INSERT INTO EMP e ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO ) VALUES ( '7521','WARD' ,'SALESMAN','7698',SYSDATE,'1250','500','30');


INSERT INTO EMP e VALUES ( '7499','ALLEN','SALESMAN','7698',SYSDATE,'1600','300','30');
INSERT INTO EMP e VALUES ( '7521','WARD' ,'SALESMAN','7698',SYSDATE,'1250','500','30');


INSERT INTO EMP e VALUES ( '7369','SMITH','CLERK','7902',SYSDATE,'800',NULL,'20');
INSERT INTO EMP e ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, DEPTNO ) VALUES ( '7369','SMITH','CLERK','7902',SYSDATE,'800','20');

일반적인 INSERT 방법은 위의 문법으로 입력을 하게 됩니다.

아래 두줄의 차이점은 전체 컬럼의 값을 넣느냐 넣지 않느냐로 비교할 수 있는데

5번 라인은 전체 컬럼 기준으로 COMM 컬럼에 NULL 을 명시하여 입력한 CASE 이며

6번 라인은 INSERT 할 컬럼에서 COMM 컬럼을 제외한 컬럼에 직접 값을 입력한 CASE 입니다.

( 동일한 결과를 확인 할 수 있습니다. )

 

테이블 생성과 데이터 입력을 한번에!

CREATE TABLE SCOTT.EMP_BACKUP AS 
SELECT * 
  FROM SCOTT.EMP
;

 

또는 테이블 백업 시 데이터도 그대로 넣어야 할 경우도 있습니다.

위와 같이 생성 시 테이블 생성 + 데이터 입력이 동시에 이루어지게 됩니다.

CREATE TABLE SCOTT.EMP_BACKUP AS 
SELECT EMPNO
     , ENAME
     , JOB
     , MGR
     , 2500 AS SAL
     , COMM
     , DEPTNO 
  FROM SCOTT.EMP
 ;

INSERT 와 마찬가지로 데이터는 CREATE TABLE [table_name] AS SELECT 문에서도 원하는 컬럼만 생성하여 컬럼을 생성할 수 있습니다.

이 때, 컬럼의 ALIAS 는 필수입니다!

일반적으로 테이블 백업을 할 때는 위의 방법을 사용할것으로 예상됩니다.

 

다수의 INSERT 처리

INSERT INTO EMP_BAK
SELECT * FROM EMP
;
INSERT 할 테이블을 지정 후 SELECT 결과를 INSERT 합니다.

INSERT INTO SCOTT.EMP_BAK ( EMPNO, ENAME, JOB, SAL )
 SELECT EMPNO, ENAME, JOB, SUM(SAL)
   FROM SCOTT.EMP
 GROUP BY EMPNO, ENAME, JOB
;

위와 같이 가공한 데이터를 INSERT 할 때 주로 사용합니다.

 

다수 테이블의 INSERT 처리

INSERT ALL
  INTO EMP_BAK  ( EMPNO, ENAME, JOB )
  INTO EMP_BAK2 ( EMPNO, ENAME, JOB )
  INTO EMP_BAK3 ( EMPNO, ENAME, JOB )
  INTO EMP_BAK4 ( EMPNO, ENAME, JOB )
  INTO EMP_BAK5 ( EMPNO, ENAME, JOB )
SELECT EMPNO, ENAME, JOB 
  FROM EMP
;

사실 다수 테이블에 한번에 INSERT 할 일이 없어서 실제로 써본적은 없지만 이런 방법이 있다는 것만 알아도 될 것 같습니다.

엑셀을 이용한 다수의 INSERT 처리

이건 INSERT 뿐만 아니라 여러방면으로 활용될 수 있는 방법인데

엑셀의 각 열에 데이터를 입력 후 수식을 이용해 문장을 만든 후 INSERT 처리하는 방법입니다.

선행작업 : A B C 열에 데이터를 입력합니다.

 

-- 수식

="INSERT INTO EMP VALUES('"&A1&"',"&"'"&B1&"',"&"'"&C1&"');"
="INSERT INTO EMP VALUES('"&A2&"',"&"'"&B2&"',"&"'"&C2&"');"
="INSERT INTO EMP VALUES('"&A3&"',"&"'"&B3&"',"&"'"&C3&"');"

 

-- 값 복사

INSERT INTO EMP VALUES('7369','SMITH','CLERK');
INSERT INTO EMP VALUES('7499','ALLEN','SALESMAN');
INSERT INTO EMP VALUES('7521','WARD','SALESMAN');

값 복사를 통해 위의 결과를 한번에 실행하여 INSERT 가능합니다.

 

 

출처 : https://hello-nanam.tistory.com/24

반응형
Comments