오라클 테이블 복사하기 (Oracle Copy Table)

오라클에서 테이블을 복사하는 방법에 대해 알아보도록 합시다. 다음과 같은 목차로 진행하겠습니다.

  • 테이블 복사(copy table)
  • 테이블 전체 복사(copy table all data)
  • 테이블 구조만 복사(copy table no data)
  • 테이블 일부 데이터만 복사(copy table some data)
  • 테이블 일부 로우, 컬럼 복사(copy table some rows, columns)

테이블 복사(copy table)

오라클 테이블 복사하기

테이블을 복사해 봅시다.

설명은 아래부분에 다 있으니 이 부분은 대충 훑어보시면 됩니다.

CREATE TABLE EMP_NEW_ALL
AS SELECT * FROM EMP;

SELECT * FROM EMP_NEW_ALL;

CREATE TABLE EMP_NEW_NO
AS SELECT * FROM EMP
WHERE 0 = 1;

SELECT * FROM EMP_NEW_NO;

CREATE TABLE EMP_NEW_SOME
AS SELECT * FROM EMP
WHERE JOB = 'MANAGER';

SELECT * FROM EMP_NEW_SOME;

CREATE TABLE EMP_NEW_SOME_COL
AS SELECT EMPNO, ENAME, JOB FROM EMP
WHERE JOB = 'MANAGER';

SELECT * FROM EMP_NEW_SOME_COL;

테이블 전체 복사(copy table all data)

전체 구조를 복사하는 방법입니다.

보통 백업이나, 막대한 데이터를 테이블을 분리하여 관리하려는 목적으로 사용합니다.

어떠한 조건도 없이 CREATE TABLE AS ~ 하시면 됩니다.

CREATE TABLE EMP_NEW_ALL
AS SELECT * FROM EMP;

테이블을 전체 복사하여 확인해 보겠습니다.

SQL> SELECT * FROM EMP_NEW_ALL;

     EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
      7839 KING       PRESIDENT            81/11/17       5000                    10
      7698 BLAKE      MANAGER         7839 81/05/01       2850                    30
      7782 CLARK      MANAGER         7839 81/05/09       2450                    10
      7566 JONES      MANAGER         7839 81/04/01       2975                    20
      7654 MARTIN     SALESMAN        7698 81/09/10       1250       1400         30
      7499 ALLEN      SALESMAN        7698 81/02/11       1600        300         30
      7844 TURNER     SALESMAN        7698 81/08/21       1500          0         30
      7900 JAMES      CLERK           7698 81/12/11        950                    30
      7521 WARD       SALESMAN        7698 81/02/23       1250        500         30
      7902 FORD       ANALYST         7566 81/12/11       3000                    20
      7369 SMITH      CLERK           7902 80/12/09        800                    20
      7788 SCOTT      ANALYST         7566 82/12/22       3000                    20
      7876 ADAMS      CLERK           7788 83/01/15       1100                    20
      7934 MILLER     CLERK           7782 82/01/11       1300                    10

테이블 구조만 복사(copy table no data)

조건에 무조건 거짓인 문장을 추가합니다. 저는 WHERE 0 = 1 을 했습니다.

그러면 어떠한 데이터도 조회를 하지 않고 테이블 구조만 복사합니다.

CREATE TABLE EMP_NEW_NO
AS SELECT * FROM EMP
WHERE 0 = 1;

테이블의 구조만 복사하였기에 조회를 하면 레코드가 없을 것입니다.

SQL> SELECT * FROM EMP_NEW_NO;
선택된 레코드가 없습니다.

테이블 일부 데이터만 복사(copy table some data)

복사를 원하는 데이터의 조건을 추가합니다.

CREATE TABLE EMP_NEW_SOME
AS SELECT * FROM EMP
WHERE JOB = 'MANAGER';

테이블의 일부만 복사해보겠습니다. 조회를 하면 JOB이 'MANAGER'인 레코드만 있을 것입니다.

SQL> SELECT * FROM EMP_NEW_SOME;

     EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
      7698 BLAKE      MANAGER         7839 81/05/01       2850                    30
      7782 CLARK      MANAGER         7839 81/05/09       2450                    10
      7566 JONES      MANAGER         7839 81/04/01       2975                    20

테이블 일부 로우, 컬럼 복사(copy table some rows, columns)

특정 컬럼(column)을 선택하시면 당연히 해당 컬럼만 복사할 수 있습니다.

CREATE TABLE EMP_NEW_SOME_COL
AS SELECT EMPNO, ENAME, JOB FROM EMP
WHERE JOB = 'MANAGER';

테이블의 일부 로우, 컬럼만 복사해보겠습니다.

SQL> SELECT * FROM EMP_NEW_SOME_COL;

     EMPNO ENAME      JOB
---------- ---------- ---------
      7698 BLAKE      MANAGER
      7782 CLARK      MANAGER
      7566 JONES      MANAGER

테이블 복사하기

테이블을 생성하며 'WHERE 0 = 1'과 같이 참이 될 수 없는 조건을 부여하면 테이블 구조만 복사할 수 있습니다. 반대로 항상 참인 조건(혹은 WHERE 생략)은 테이블을 그대로 복사(백업) 할 수 있습니다.

댓글