SQL CTAS(CREATE TABLE AS SELECT)문

CTAS란 ?!

“Create Table As Select”의 약자로 기존 테이블이나 쿼리 결과를 바탕으로 새로운 테이블을 생성하는 SQL 문법

CREATE TABLE new_table AS SELECT ...

SELECT 절을 통해 얻은 결과를 새로 생성된 테이블에 저장하여 사용한다.

CTAS 왜 사용하는거야?

특정 시점의 데이터를 저장해서 백업이나 스냅샷으로 활용 가능하고

데이터 엔지니어링 관점에서 데이터 웨어하우스에는 많은 폴더, 테이블이 존재하는데

  • 자주 JOIN 하는 테이블을 임시 테이블로 생성해 사용할 수 있고,

기존 데이터 가공하고 새로운 형식으로 저장하여 후속 분석이나 다른 작업에 활용 할 수 있다.

✏️ CTAS vs 뷰(View)

기존의 테이블 외에 테이블을 만든다는 점에서 뷰(View)와 유사해보이지만 저장방식과 용도의 차이가 있다.

CTAS 는 생성된 새로운 테이블이 실제 물리적 데이터베이스에 저장되고, 이후 원본 데이터가 변경되어도, 생성된 테이블의 데이터는 그대로 유지 → 데이터 수정 가능

View 는 물리적으로 저장하지 않고, 기존 테이블의 쿼리 결과를 참조하는 가상 테이블

원본 테이블의 데이터 실시간으로 조회해서, 원본데이터 변경되면 뷰 조회 결과도 자동으로 반영

→ 데이터 수정 못함 (일부 조건 수정시 가능)

위의 차이로 CTAS는 고정된 시점의 데이터를 저장하여 새 테이블을 생성하여 사용, 가상 테이블로 실시간 조회를 제공한다.


CTAS 사용법

* * *

기본적인 CTAS 구문

CREATE TABLE new_table AS
SELECT column1, column2, ...
FROM existing_table
WHERE condition;

예제 1. 전체 데이터 복사

employees 테이블에 있는 전체 데이터를 employee\_backup 테이블로 복사

-- 1. 전체 데이터 복사
CREATE TABLE employee_backup AS 
SELECT * 
FROM employees;

예제 2. 조건에 따른 데이터 필터링

-- 2. 조건에 따른 데이터 필터링
CREATE TABLE employee_copy AS
SELECT *
FROM employees
WHERE salary > 100000;

예제 3. 특정 컬럼만 선택

-- 3. 특정 컬럼만 선택
CREATE TABLE employee_copy AS
SELECT employee_id, employee_name
FROM employees;

예제 4. 기존 테이블의 구조만 복사

WITH NO DATA 옵션을 사용해서 데이터 복사없이 기존 테이블의 구조를 기반으로 빈 테이블을 만들 수 있다. 테이블을 유연하게 설계할 수 있고 데이터는 나중에 로드 할 수 있는 장점이 있음.

-- 4. 기존 테이블의 구조만 복사
-- WITH NO DATA 옵션 사용 (Oracle)
CREATE TABLE employee_copy AS
SELECT *
FROM employees
WITH NO DATA;

-- WITH NO DATA 옵션 지원하지 않는 경우 (MySQL)
CREATE TABLE employee_copy AS 
SELECT *
FROM employees
WHERE 1=2;

CTAS 사용시 주의사항

  • CTAS로 생성하려는 테이블이 이미 존재할 경우 에러 발생 주의
  • 인덱스나 제약조건은 복사 해오지 않기 때문에 따로 설정 필요