DataBase : Oracle
Ex) 예제 테이블
Table A
column id
column name
column gender
column memo
문제 ) Table A 데이터 복제하기.
A테이블 데이터를 복제하기 위하여
아래처럼 SELECT 를 먼저 실행후 해당 DATA를 INSERT 문에 넣었다.
SELECT * FROM A
INSERT INTO A
( id , name , gender , note)
VALUES
( id , name , gender , memo)
또는 아래와 같은 방법을 사용 했었다.
INSERT INTO A
( id , name )
VALUES
(
(select id from A) , (select name from A )
)
불필요하게 서브쿼리와 SELECT 를 많이 타게 되고, 복제한 데이터와 기존 데이터를 리스트로 출력했을때 한눈에 보기가 힘들었다.
또한 컬럼의 값이 몇 개 안될때는 크게 문제가 되지 않았지만 컬럼의 수가 많아 질수록 여러 문제가 발생했다.
그러다 문득 SELECT와 INSERT를 한번에 할수 있는 방법이 없나 이것저것 찾아보다 보니
INSERT INTO A
( id , name , gender , memo)
SELECT
id,
CONCAT(name,'[복제]'),
gender,
memo
FROM
A
WHERE
id = #{ id }
위와같이 INSERT 문안에 VALUES 대신 SELECT 문이 가능 하다는 것 을 알게되었다. 기존에는 컬럼 하나하나 씩만 가능한줄 알고있었는데 , VALUES 대신 전부 SELECT 가 가능하다는 점은 신선한 충격이었다.
앞으로도 종종 유용하게 사용 할 만한 쿼리인것 같다.
/* CONCAT = > 두 문자열을 하나의 문자열로 합쳐서 반환. 기존 AA 라는 ID 가 있을경우 AA[복제] 라는 이름으로 저장됨. */