작업을 하다보면 , 백업을 위해서 테이블 전체를 복사하거나 몇가지 통계 정보 또는 샘플 데이터 추출을 위해서 몇건의 데이터를 복사하는 경우가 많습니다.
이러한 복사 방법과 복사시 어떻게 되는지 자세히 정리하고자 포스트를 작성 하였습니다.
여기서 중요한 것은 테이블을 복사하면, 컬럼,데이터만 복사 됩니다. 즉 인덱스 제약조건 등은 복사되지 않습니다.
이점을 유의해서 테이블 복사를 사용 하셔야 합니다.
예제를 위해서 테이블을 생성하고, 값을 입력 하였습니다.
USE workDB
GO
CREATE TABLE
Copy_Tbl
(
Col1 INT
,Col2 VARCHAR(10)
)
GO
INSERT INTO
Copy_Tbl VALUES (1,'주형권1')
INSERT INTO
Copy_Tbl VALUES (2,'주형권2')
INSERT INTO
Copy_Tbl VALUES (3,'주형권3')
SELECT *
FROM Copy_Tbl |
위의 테이블 생성 결과값은 아래와 같습니다.
위와 같이 입력하고, 여러가지 상황에 따라서 복사를 테스트 하면 다음과 같습니다.
1. 테이블 생성과 동시에 데이터 복사
/*테이블 생성과 함께 복사
FROM 절의 Copy_Tbl을 복사하여, Copy1_Tbl 테이블 생성하며 데이도 복사
*/
SELECT *
INTO Copy1_Tbl
FROM Copy_Tbl
|
Copy1_Tbl 조회 결과 입니다.
2. 테이블을 생성과 동시에 원하는 컬럼의 데이터만 복사
/*테이블 생성과 함께 복사 / 원하는
컬럼만 지정
FROM 절의 Copy_Tbl을 복사하여, Copy2_Tbl 테이블 생성하며 데이도 복사
여기서 원하는 컬럼을 따로 복사 가능합니다. 물론 생성되는
테이블에는 원하는
컬럼만 입력됩니다.
*/
SELECT Col1 INTO
Copy2_Tbl
FROM Copy_Tbl
|
Copy2_Tbl 조회 결과 입니다.
3. 테이블을 생성과 동시에 테이블 구조만 복사
/*테이블 생성 / 테이블 구조만 복사 테이블을 복사하여, 새로운 테이블로 사용하고자 하는 경우가 있습니다. 하지만 이 경우 인덱스 및 제약조건 등이 복사되지 않으므로 주의해야 합니다. 해당 내용은 단순히 데이터 백업 용도 및 기록을 위한 백업에만 사용하길 권장 드립니다.
*/
SELECT Col1 INTO
Copy3_Tbl
FROM Copy_Tbl
WHERE 1=2
|
Copy3_Tbl 조회 결과 입니다.
4. 테이블을 생성과 동시에 원하는 데이터만 복사
/*테이블 생성과 함께 복사 / 특정 ROW만 복사
가끔씩 개발자 OR 팀에게 조회 권한을 따로 부여하여, 테이블 SELECT만 가능하도록 하기 위해
특정 ROW를 복사하여, 테이블을
만들어 주고자 하는 경우가 있습니다. 이때 다음과 같은 쿼리를
이용하면 특정 ROW만 복사가 가능합니다.
*/
SELECT * INTO
Copy4_Tbl
FROM Copy_Tbl
WHERE Col1 =
2
Copy4_Tbl 조회 결과 입니다.
5. 이미 생성된 테이블에 데이터만 복사
-- 테이블 생성
CREATE TABLE
Copy5_Tbl
(
Col1 INT
,Col2 VARCHAR(10)
)
GO
/*이미 생성된 테이블에 데이터만 복사
이미 생성된 테이블에 특정 값만 복사하여, 입력할 경우에
사용 합니다. 또는 구조 및 인덱스 제약조건등
모든 구조를 완벽히 복사한 테이블에 데이터만 넣고자 하는 경우에 사용 합니다.
마이닝을 할 경우에 위와 같이 구조를 완전히 복사하여, 값을
복사 한뒤 RE_NAME 시키는 방법을 주로
사용 합니다.
*/
INSERT INTO
Copy5_Tbl
SELECT *
FROM Copy_Tbl
|
Copy5_Tbl 조회 결과 입니다.
위의 내용을 응용하여, 통계 데이터 추출 및 복사를 하는 경우가 빈번하며, 응용하면 JOIN / GROUP BY 등의 작업을 통해 원하는 값만 집어 넣을 수도 있습니다.
데이터 복사 및 테이블 복사는 아주 기본적인 내용이지만 여러 경우에서 자주 사용하는 아주 중요한 내용입니다.