프로젝트를 진행하면서 테이블의 구조 변경을 하거나 기능 테스트 중 원하지 않게 데이터가 변경되는 경우가 있다. 많지 않은 데이터라도 하나하나 다시 추가하거나 변경하는 것이 번거롭기 때문에 테이블을 복사해서 데이터를 백업해두면 편하다. 복사해둔 테이블로부터 데이터를 다시 복사하여 데이터를 복구할 수 있기 때문이다.
테이블 복사
- 기존 테이블과 똑같은 새로운 테이블 만들기
CREATE TABLE 새로 만들 테이블명(복사본) AS SELECT * FROM 복사할 테이블명(원본);
AS 키워드를 사용해서 원본 테이블의 구조와 데이터까지 모두 똑같은 복사본을 만들 수 있다. 다만 NOT NULL을 제외한 제약조건은 복사되지 않는다.
- 기존 테이블의 구조만 같은 새로운 테이블 만들기
CREATE TABLE 새로 만들 테이블명 AS SELECT * FROM 복사할 테이블명 WHERE 1 = 2;
조건이 거짓인 WHERE절을 덧붙이면 데이터 복사 없이 기존 테이블과 구조만 같은 새로운 테이블이 만들어진다.
데이터 복사
A 테이블의 데이터를 B 테이블에 복사하고 싶을 때,
- A 테이블과 B 테이블의 구조가 같을 경우
INSERT INTO B 테이블 SELECT * FROM A 테이블;
위의 쿼리문을 사용하면 모든 A 테이블의 모든 데이터가 B 테이블에 추가된다. 뒤에 WHERE절을 덧붙여서 원하는 데이터만 추출하여 넣을 수도 있다.
- A 테이블과 B 테이블의 구조가 다른 경우
INSERT INTO B 테이블((B 테이블의)컬럼1, 컬럼2, ...)
SELECT (A 테이블의)컬럼1, 컬럼2, ... FROM A 테이블;
예로 MEMBER 테이블의 ID, NAME 컬럼의 데이터를 USER 테이블의 USER_ID, USER_NAME 컬럼에 복사하고 싶다면 아래와 같다.
INSERT INTO USER(USER_ID, USER_NAME) SELECT ID, NAME FROM MEMBER;
마찬가지로 뒤에 WHERE절을 덧붙여서 원하는 데이터만 삽입 가능하다.
'DataBase' 카테고리의 다른 글
[Oracle] JOIN (2) - OUTER JOIN, SELF JOIN(오라클, ANSI 문법) (2) | 2022.08.10 |
---|---|
[Oracle] JOIN (1) - CROSS JOIN, INNER JOIN(오라클, ANSI 문법) (2) | 2022.08.03 |
[DB] 데이터 모델과 데이터베이스 설계( + 스키마) (0) | 2022.05.25 |
[Oracle] 제약 조건(Constraint) 추가, 변경, 조회, 삭제 (0) | 2022.04.14 |
댓글