728x90
MSSQL 특정 테이블 복사
- DB작업시 전체백업을 항상 꼼꼼하게 한 뒤에 작업해야 겠지만, 한 두개의 테이블에 UPDATE, DELETE 작업을 할 때 예상치 못한 만일의 사태에 대비하기 위해서 또는 긴급하게 데이터를 원복하기 위해 개별 테이블 단위의 백업도 자주하게 됩니다.
- 이번 글에서는 SELECT INTO, INSERT SELECT 구문을 활용한 데이터복사와 테이블복사, JOIN을 활용한 데이터복사 및 조건절을 통한 필터링에 대해 알아보겠습니다.
- 아래의 테이블 카피 구문을 사용하면 간단한 쿼리로 신속하게 데이터를 백업하고 유사시 쉽게 원복할 수 있습니다.
예제로 사용할 테이블
Fruit
Seq | Name | Flavor | Rank |
1 | 딸기 | 새콤하다 | 1 |
2 | 바나나 | 달콤하다 | 2 |
3 | 사과 | 향긋하다 | 3 |
FruitSimple
Seq | Name |
MonthlySales
Name | Month | Rank |
딸기 | 9월 | 3 |
바나나 | 9월 | 1 |
사과 | 9월 | 2 |
상황1. [Fruit] 테이블을 카피해 [Fruit_180101] 을 생성하고 데이터도 모두 카피하고 싶다.
SELECT * INTO Fruit_180101 FROM Fruit --테이블 자동생성하고, 데이터 모두 카피
SELECT * INTO Fruit_180101 FROM Fruit WHERE 1=2 --테이블 자동생성하고, 조건 1=2는 항상 false이므로 데이터는 카피되지 않음
SELECT * INTO Fruit_180101 FROM Fruit WHERE Seq < 3 --테이블 자동생성하고, Seq < 3인 데이터만 카피
결과1)
테이블 복사 및 데이터 모두카피 결과
결과2)
테이블만 카피한 결과
결과3)
테이블 카피하고 조건에 맞는 데이터만 카피
SELECT INTO 문은 테이블을 새로 생성하면서 데이터를 카피할 때 사용합니다. 물론 WHERE 조건절도 사용가능합니다.
주의) 키, 인덱스 등은 동일하게 생성되지 않음.
상황2. [Fruit] 테이블의 데이터를 [FruitSimple] 테이블에 데이터만 카피하고 싶다.
INSERT INTO Fruit_180101 SELECT * FROM Fruit --SELECT의 결과를 스키마가 같은 이미 존재하는 다른 테이블에 카피
INSERT INTO FruitSimple(Seq, Name) SELECT Seq, Name FROM Fruit --필드를 지정해서 카피가능
INSERT INTO FruitSimple(Seq, Name) SELECT Seq, Name FROM Fruit WHERE Seq <3 --조건절 사용 가능
결과1
SELECT의 결과를 스키마가 같은 이미 존재하는 다른 테이블에 카피
결과2
특정 필드만 카피
결과3
조건절 사용하여 테이터만 카피한 결과
INSERT INTO SELECT문은 SELECT문의 결과 데이터를 다른테이블에 카피할 때 사용합니다. 일반적인 INSERT INTO문 처럼 특정필드만 지정 가능합니다.
응용1. [Fruit], [MonthlySales]두 테이블의 조인의 결과를 카피해 [FruitMonth_180101] 테이블을 생성하고 데이터도 모두 카피하고 싶다.
SELECT FR.Seq, FR.Name, MS.Month
INTO FruitMonth_180101
FROM Fruit FR
INNER JOIN MonthlySales MS
ON FR.Name = MS.Name
결과1
응용2. Fruit, MonthlySales두 테이블의 조인의 결과를 FruitSimple 테이블에 일부 필드 데이터만 카피하고 싶다.
INSERT INTO FruitSimple(Seq, Name)
SELECT FR.Seq, MS.Name
FROM Fruit FR
INNER JOIN MonthlySales MS
ON FR.Name = MS.Name
결과1
두 테이블의 조인의 결과를 다른 테이블에 일부 필드 데이터만 카피하고 싶다.
참고: https://spaghetti-code.tistory.com/14
728x90
'Database' 카테고리의 다른 글
(MS-SQL) ORDER BY 1,2 의미 (0) | 2022.11.22 |
---|---|
(MS-SQL) convert 함수로 날짜관련 데이터 변환 방법 (0) | 2022.11.14 |
(MS-SQL 복합키) primary key가 2개일 때 (0) | 2022.11.02 |
(DB 구조) 마스터-슬레이브 구조 (0) | 2022.10.14 |
INNER JOIN, LEFT JOIN, RIGHT JOIN의 차이 (0) | 2022.07.17 |