글 목록

최신 글과 검색 결과
DEVELOPMENT

SQL, 테이블 복사 및 데이터 복사

간지뽕빨리턴님

이 글의 목차

    반응형

    SQL로 테이블 구조와 데이터를 한 번에 복사하는 방법을 DBMS별로 정리합니다.

    설마, 데이터를 하나하나 입력하고 계신 건 아니죠?

    업무를 하다 보면 비슷한 구조의 테이블이나 데이터를 복사해야 하는 경우가 자주 있습니다. 저도 처음엔 이 방법을 몰라 비효율적으로 작업하며 시간을 많이 허비했는데, 공부하면서 알게 된 뒤로는 가장 유용하게 쓰는 방법 중 하나가 되었습니다.

     

    이 글에서는 SQL로 테이블 구조만 복사하기, 구조와 데이터를 함께 복사하기, 일부 컬럼만 골라 복사하기를 PostgreSQL·Oracle·MySQL 기준으로 정리합니다. 저처럼 입문 단계의 분들에게 도움이 되길 바랍니다.

    목차

      1. 테이블 구조만 복사하기

      데이터는 빼고, 컬럼 구성만 동일한 빈 테이블을 만들고 싶을 때 사용합니다. DBMS마다 문법이 조금 다릅니다.

      -- PostgreSQL
      CREATE TABLE new_table (LIKE source_table INCLUDING ALL);
      -- INCLUDING ALL: 기본값, 제약조건, 인덱스 등도 함께 복사
      
      -- Oracle (데이터 없이 구조만: 거짓 조건 사용)
      CREATE TABLE new_table AS SELECT * FROM source_table WHERE 1 = 0;
      
      -- MySQL
      CREATE TABLE new_table LIKE source_table;

      PostgreSQL의 LIKE ... INCLUDING ALL은 제약조건·기본값·인덱스까지 가져오지만, 옵션 없이 LIKE만 쓰면 컬럼 정의만 복사된다는 점을 기억하세요.

       

      2. 구조와 데이터를 함께 복사하기

      원본 테이블의 구조와 데이터를 한 번에 복사해 새 테이블을 만드는 방법입니다. CREATE TABLE AS SELECT(흔히 CTAS라고 부릅니다)를 사용합니다.

      -- 공통 (PostgreSQL / Oracle / MySQL)
      CREATE TABLE new_table
      AS SELECT * FROM source_table;
      
      -- 조건을 걸어 일부 행만 복사할 수도 있다
      CREATE TABLE new_table
      AS SELECT * FROM source_table
      WHERE created_at >= '2026-01-01';

      주의 – CTAS는 컬럼과 데이터는 복사하지만, 기본키·인덱스·외래키·제약조건은 복사되지 않는 경우가 많습니다. 복사 후 필요한 인덱스와 제약조건은 별도로 다시 생성해야 합니다.

       

      3. 기존 테이블에 데이터만 복사하기 (일부 컬럼)

      이미 존재하는 테이블에 다른 테이블의 데이터를 넣고 싶을 때는 INSERT INTO ... SELECT를 사용합니다. 원하는 컬럼만 골라 복사할 수 있어 실무에서 가장 자주 쓰입니다.

      -- A테이블의 특정 컬럼을 조건에 맞게 B테이블로 복사
      INSERT INTO B_table (col1, col2)
      SELECT col1, col2
      FROM A_table
      WHERE condition;
      
      -- 컬럼명 대신 *를 쓸 수도 있지만,
      -- 두 테이블의 컬럼 순서·개수가 정확히 일치할 때만 안전하다.
      -- 가급적 컬럼명을 명시하는 것을 권장한다.

      조건(WHERE)으로 원하는 행만 골라 넣을 수 있고, 컬럼을 직접 지정하므로 값을 의도대로 통제하기 좋습니다. 다만 *를 쓰면 컬럼 순서가 어긋났을 때 엉뚱한 컬럼에 값이 들어갈 수 있으니, 컬럼명을 명시하는 습관을 들이는 것이 안전합니다.

       

      방법 한눈에 비교

      목적 방법 데이터
      구조만 복사 CREATE TABLE ... LIKE 없음
      구조 + 데이터 복사 CREATE TABLE ... AS SELECT 포함
      기존 테이블에 데이터 추가 INSERT INTO ... SELECT 선택한 행

       

      마무리

      SQL로 테이블과 데이터를 복사하는 세 가지 방법을 정리했습니다. 구조만 필요하면 LIKE, 구조와 데이터를 함께 옮기려면 CREATE TABLE AS SELECT, 기존 테이블에 원하는 데이터만 넣으려면 INSERT INTO ... SELECT를 쓰면 됩니다.

       

      특히 CTAS는 인덱스·제약조건이 함께 복사되지 않는다는 점만 기억하면, 실무에서 정말 유용하게 활용할 수 있습니다. 궁금한 점이 있으면 댓글로 남겨 주세요!