개발/Query

Insert 문 안에 Select 문 사용하기

투리비 2021. 3. 28. 21:41

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[복제] 라는 이름으로 저장됨. */