-
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의 특징
- 새로운 테이블을 생성하면서 데이터를 삽입할 수 있음
- 제약 조건, 기본 키, 인덱스는 복사되지 않음
- 대량의 데이터를 새로운 테이블로 빠르게 복사할 때 사용
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