728x90
반응형

프로젝트를 진행하다 보면

지역별, 지점별 기준으로 업데이트하는 경우가 많습니다

그렇때마다 지점별, 지역별 쿼리를 만들어서 inset를 하는 경우가 있습니다

 

 

DEPT 테이블 행의 값을

EAST, WEST, MID의 세 테이블에 INSERT 하고 

테이블 구조는 DEPT와 같다고 가정합시다

 

 

 

한번에 여러 테이블 데이터 삽입

 

아래와 같은 구문을 사용하여 INSERT 하게되면

한번의 결과값으로 동시에 여러개의 테이블에 INSERT합니다

 

 

INSERT ALL
INTO EAST VALUES (DEPTNO, DNAME, LOC)
INTO WEST VALUES (DEPTNO, DNAME, LOC)
INTO MID VALUES (DEPTNO, DNAME, LOC)
SELECT (DEPTNO, DNAME, LOC) FROM DEPT WHERE DEPTNO = 20;

 

 

하지만 이 방법은 어떠한 조건없이

동일하게 같은 값들이 INSERT한다는 점으로

가용성이 떨어지는 면이 있습니다

 

 

한번에 여러 테이블 조건부 인설트 하기

 

다음 방법을 사용하면 같은 행의 값으로

둘 이상의 테이블에서 삽입할 수 있습니다

 

 

그럼 코드를 작성해봅시다

아래와 같이 코드를 작성하면

한 행으로 여러 테이블에 insert 할 수 있습니다

 

 

INSERT ALL
  WHEN LOC IN ('NEW YORK', 'BOSTON') THEN 
  	INTO EAST (DEPTNO, DNAME, LOC) VALUES (DEPTNO, DNAME, LOC)
  WHEN LOC = 'CHICAGO' THEN
    INTO MID (DEPTNO, DNAME, LOC) VALUES (DEPTNO, DNAME, LOC)
  ELSE
    INTO WEST (DEPTNO, DNAME, LOC) VALUES (DEPTNO, DNAME, LOC)
SELECT DEPT, DNAME, LOC
FROM DEPT

 

 

INSERT ALL과 INSERT FIRST 제대로 알고 사용하기

위와 같은 경우는 INSERT ALL 또는 INSERT FIRST 문을 사용할 수 있습니다

두 개의 구문은 같은 결과를 생성하지만

차이점은 존재합니다

 

INSERT FIRST는 조건이 참이 되는 즉시 WHEN-THEN-ELSE에서 빠져나오는

반면 INSERT ALL은 이전 테스트가 참으로 평가되더라도  

모든 조건을 평가합니다

 

따라서 INSERT ALL을 사용하여 같은 행을 둘 이상의 테이블에 삽입할 수 있습니다

그것이 싫다면 FIRST를 사용해야 합니다

 

mybatis를 사용하여 동적 쿼리와 같이 사용한다면

가용성은 더욱 높아질 거라 생각합니다

 

프로젝트를 진행하다보면 여러 데이터를 핸들링하게 되며

어떤 쿼리가 있는지 알아야지만

적재적소에 사용하여 시간을 절약하며

코드도 간결해질수 있을거라 생각합니다

 

오늘도 코딩으로 한걸음 나아갑시다

모두 화이팅하시고 힘내세요!!

아직 대모험은 끝나지 않았으니까요!!

 

화이팅!!

 

 

 

 

 

 

728x90
반응형

+ Recent posts

Powered by Tistory, Designed by wallel