데이터베이스에서 테이블을 복사해야 할 때,
엑셀에서 데이터를 복사해서 다른 시트에 붙여넣는 것처럼 데이터베이스에서도 비슷한 작업을 할 수 있다.
바로 select into 문을 사용하는 것이다.
오늘은 데이터 이전을 초보자도 쉽게 따라 할 수 있도록 select into 문에 대해 알아보도록 하자.

글을 읽기 전에…

이 글은 MS-SQL(SQL Server)를 기준으로 작성하였다.
이 구문은 MySQL에서는 사용할 수 없다.
MS-SQL의 SSMS로만 쿼리 테스트를 진행해보았기 때문에
다른 RDBMS에서는 이 구문을 사용할 수 있는지의 여부는
테스트를 해보지 않았기 때문에 확답을 해줄 수가 없다.

SELECT INTO 구문 이란 무엇일까?

SELECT... INTO 는 기본 파일 그룹에 새 테이블을 만들고
쿼리의 결과 행을 이 테이블에 삽입하는 역할을 한다.

간단하게 말해서 기존 테이블에서 데이터를 가져와
새로운 테이블을 생성하면서 동시에 데이터를 채워 넣는 SQL 명령어이다.
복잡한 과정 없이 한 번에 데이터를 이동하고 새로운 테이블을 만들 수 있어 매우 효율적이다.
그렇기 때문에 특정 조건에 필터링 된 데이터를 새로운 테이블에 복사할 때 편리하게 사용할 수 있다.

SELECT INTO 문 사용법, 어떻게 사용할까?

SELECT … INTO FROM 기본 문법

select into 문의 기본적인 구조는 다음과 같다.

SELECT column1, column2, ...
INTO new_table
FROM existing_table
WHERE condition;
SQL
  • SELECT : 어떤 컬럼을 가져와서 데이터를 조회할지 선택한다.
  • INTO : 조회되는 데이터를 저장할 새로운 테이블의 이름을 지정한다. 이 테이블은 새로 생성되기 때문에 이미 존재할 경우 오류가 출력된다. (데이터베이스에 ‘~'(이)라는 개체가 이미 있습니다.)
  • FROM : 데이터를 가져올 기존 테이블의 이름을 지정한다. 이 테이블은 반드시 존재하는 테이블이여야만 한다.
  • WHERE : 특정 조건을 만족하는 데이터만 가져오고 싶을 때 사용한다. 이는 상황에 따라 써도 되고 쓰지 않아도 된다.

데이터가 필터링 된 테이블 복사 사용 예시

'직원' 테이블에서 '부서번호' 가 14인 직원들의 '직원번호' , '직원명' 정보를 가져와 '개발팀' 이라는 새로운 테이블을 생성해보자.

SELECT 직원번호, 직원명
INTO 개발팀
FROM 직원
WHERE 부서번호 = 14;
SQL

SELECT INTO 활용법

백업 테이블 생성하기

데이터 분석이나 수정 작업 전에 select into 문을 사용하여 기존 테이블과 동일한 구조의 백업 테이블을 손쉽게 생성할 수 있다.

SELECT *
INTO 테이블_백업_240823
FROM 테이블;
SQL

조건에 맞는 데이터 추출하기

특정 조건에 맞는 데이터만 추출하여 새로운 테이블을 만들고 싶을 때 유용하다.
예를 들어, 특정 기간 동안의 판매 데이터를 분석하기 위해 새로운 테이블을 만들 수 있다.

SELECT *
INTO 판매분석_2023
FROM 판매
WHERE 판매일자 BETWEEN '2023-01-01' AND '2023-12-31';
SQL

테이블 구조 복사하기

데이터는 제외하고 테이블 구조만 복사하고 싶다면 두 가지 방법이 있다.

  1. where 절에 1 = 0 조건 추가하기
  2. 조회되는 행의 개수를 0(없음)으로 제한하기
SELECT *
INTO 새테이블
FROM 기존테이블
WHERE 1 = 0;

-- 혹은

SELECT TOP 0 *
INTO 새테이블
FROM 기존테이블
SQL

SELECT INTO 구문 사용 시 주의사항

  1. 테이블 변수나 테이블 반환 매개 변수를 새 테이블로 지정할 수 없다.
  2. 원본 테이블이 분할(파니셔닝)된 경우 SELECT INTO 문을 사용하여 분할된 테이블을 만들 수 없다.
    • 분할된 테이블이란 데이터를 나눠서 관리하는 테이블인데, 기존에 분할된 테이블에 SELECT INTO 문을 사용하면 그냥 일반 테이블이 만들어 진다.
  3. 원본 테이블에 정의된 인덱스, 제약 조건 및 트리거는 생성되는 새 테이블에 포함되지 않는다.
    • 설정이 필요한 경우에는 새 테이블이 생성된 후에 설정들을 새로 추가해줘야 한다.
  4. ORDER BY 절을 지정해도 행의 순서를 보장하지 않는다.
  5. SELECT 절에 계산 열이 있으면 새 테이블의 해당 열은 계산 열이 아닌 SELECT INTO 문이 실행될 때 계산된 값으로 저장된다.
    • 계산 열이랑 다른 열의 값을 계산해서 자동으로 값을 채우는 열을 의미한다. 해당 열이 새 테이블에 포함되어 있으면 이 열은 계산된 열이 아닌 그저 복사할 때 계산된 값이 들어있는 일반 열이 되게 된다.
    • 계산열은 다음과 같은 구조를 가진 열을 말한다. ALTER TABLE 테이블명 ADD 컬럼명 AD (계산식)

요약

SELECT INTO 문은 한 테이블의 데이터를 새 테이블로 복사하는 명령어이다.
특징으로는 모든 열 혹은 일부 열만 새 테이블에 복사 할 수 있으며, 쉽게 백업 사본 테이블을 생성할 수 있다.
하지만 인덱스, 제약 조건 등은 새 테이블에 포함되지 않는다.

참고된 자료

> w3schools.com – SQL SELECT INTO 문
> microsoft.com – SQL Server 2022 – SQL – SELECT – INTO 절(Transact-SQL)

Similar Posts

댓글 남기기