ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • CTAS란?
    CS/DataBase 2025. 3. 28. 21:22

    CTAS(Create Table As Select)는 SQL에서 기존 테이블의 데이터를 새로운 테이블에 복사하여 생성하는 방법입니다.

    즉, 새로운 테이블을 만들면서 동시에 데이터를 삽입하는 역할을 합니다.

     

    CTAS의 기본 구조는 다음과 같습니다

    CREATE TABLE new_table  
    AS  
    SELECT * FROM existing_table;

     

    예시를 들기 위해, 아래 쿼리로 테이블을 하나 생성하고, 값을 넣어보겠습니다.

    create table sub (
    idx INT AUTO_INCREMENT primary key,
    name VARCHAR(20),
    score double
    );
    insert into sub(name, score) values
    ('algorithm',4.0),
    ('Operating System',3.5),
    ('DataBase',4.5),
    ('Network',4.5),
    ('Programming',4.0);

     

     

    이후, CTAS 문법을 이용해 sub_1이라는 테이블을 만들고 데이터를 확인해보면 sub 테이블의 값과 동일하게 들어간 것을 볼 수 있습니다.

     

    기존 테이블에서 새로운 테이블로 데이터를 가져올 때, 조건문을 사용할 수도 있습니다.

     

    또한 특정 컬럼만 가져올 수도 있습니다.

     

     

    CTAS의 특징

    1. 새로운 테이블을 생성하면서 데이터를 삽입할 수 있음
    2. 제약 조건, 기본 키, 인덱스는 복사되지 않음
    3. 대량의 데이터를 새로운 테이블로 빠르게 복사할 때 사용

     

    INSERT INTO ... SELECT와의 차이점

    CTAS가 새로운 테이블을 만들고 데이터를 복사하는 쿼리라면,  INSERT INTO는 기존 테이블에 데이터를 추가하는 쿼리입니다.

     

    문법은 다음과 같습니다.

    -- table1의 데이터를 table2에 복사
    INSERT INTO table2  
    SELECT * FROM table1;

     

    다음과 같이 새로운 테이블을 만들고, sub 테이블의 데이터를 옮겨보겠습니다.

    create table sub_4 (
    idx INT AUTO_INCREMENT primary key,
    name VARCHAR(20)
    );
    -- sub테이블과는 달리 score 컬럼이 없음

     

    sub는 컬럼이 세개이고, sub_4는 컬럼이 두개입니다. 그렇다면 INSERT INTO ... SELECT를 이용해 데이터를 복사할 수 있을까요? 

    그럴 수 없습니다.

    컬럼 숫자가 맞지 않은 테이블에 데이터를 복사하려고 할 경우 다음과 같이 에러가 뜹니다.

    INSERT INTO sub_5  
    SELECT * FROM sub;
    -- Error Code: 1136. Column count doesn't match value count at row 1

     

    이때 필요한 컬럼만 select 하면 데이터를 복제할 수 있습니다.

    INSERT INTO sub_5  
    SELECT idx, name FROM sub;
    
    select * from sub_5;

    'CS > DataBase' 카테고리의 다른 글

    vectorDB와 GraphDB  (0) 2025.09.16
    트랜잭션 격리 수준  (0) 2025.02.23
    SQL의 윈도우 함수 (with PARTITION BY)  (2) 2025.02.17
    CTE(Common Table Expression)  (2) 2025.02.17
    [DataBase] 트랜젝션  (2) 2024.12.02
Designed by Tistory.