본문 바로가기

나 취준생/SQL

SQL - 다중 insert 문

320x100

지금까지는 insert 문장으로 한 번에 한 건만 입력할 수 있었다.



예시 :

insert into emp ( empno, ename, sal )

 values ( 1234, 'SCOTT', 3000 ) ;



그러나 다중 insert 문을 이용하면 여러 개의 테이블에 동시에 같은 데이터를 여러 개 입력할 수 있다.



* 다중 insert 문의 종류 4가지


1. 무조건 all insert 문

2. 조건부 all insert 문

3. 조건부 first insert 문

4. pivoting insert 문



1. 무조건 all insert 문


* 여러 개의 테이블에 조건 없이 한 번에 데이터를 입력하는 것


예제 : target_a, target_b, target_c 테이블을 만들고 emp 테이블의 구조와 동일하게 만들기


create table target_a

 as

  select *

   from emp

    where 1=2;


create table target_b

 as

  select *

   from emp

    where 1=2;


create table target_c

 as

  select *

   from emp

    where 1=2;


* where 절의 1=2의 의미


1=2 가 거짓이므로 emp 테이블을 가져오지만

테이블 내의 데이터 값은 가져오지 못한다.

즉, 테이블 구조만 가져와서 테이블을 만드는 것



참고로 where 절의 조건을 안 줬다면, 당연하지만 테이블 전체가 그대로 옮겨졌을 것이다.




이제 구조를 만들었으니, emp 테이블의 데이터를 한 번에 전부 넣어보자.


insert all into target_a

into target_b

into target_c


 select *

  from emp;


emp 행은 14개이고, 3 테이블에 넣었으므로 42행이 삽입되었다고 뜬다.


select count(*) from target_a;

select count(*) from target_b;

select count(*) from target_c;




로 확인하기



2. 조건부 all insert 문


조건에 맞는 데이터만 입력되게 조건을 주는 입력문


예제 : target_a 테이블에는 comm을 받는 사원들만 입력하고, target_b에는 comm을 받지 않는 사원들만 입력하기


insert all

 when 조건 then into 테이블명

 when ~


해주면 된다.



insert all

when comm is not null then into target_a ( empno, ename, sal, comm )

when comm is null then into target_b ( empno, ename, sal, comm )

 select empno, ename, sal, comm

  from emp;


3. 조건부 first insert 문


조건에 맞는 데이터가 첫 번째 테이블에 입력되고

나머지 데이터를 가지고 새로운 조건에 맞춰서

두 번째 또는 세 번째에 입력하는 insert 문


예제 : 부서 번호가 20번인 사원들은 target_a에 입력하고, 남은 나머지 부서 번호 사원들 중

월급이 1200 이상은 target_b에 입력하고 1200 이하는 target_c에 저장하기


insert first

when deptno=20 then into target_a

when sal>=1200 then into target_b

when sal<1200 then into target_c

 select *

  from emp;




처음 FIRST 바로 다음 문에서 나뉘고 나머지는 조건부 all insert 문처럼 조건에 맞아야 테이블에 들어간다.




4. pivoting insert 문


어렵게 pivot 문으로 작성하지 않고 pivoting insert 문으로

데이터를 입력한 후에 pivot 문을 사용하지 않은 간단한 SQL로

결과를 보게할 때 필요한 insert문


예제 :

create table week_sum_sal

( empno number(10),

  ename varchar2(10),

  mon    number(10),

  tues     number(10),

  wed     number(10),

  thur     number(10),

  fri        number(10)));


insert into week_sum_sal

 select empno, ename, sal*0.1, sal*0.2, sal*0.3, sal*0.4, sal*0.5

  from emp;


예제 : week_sum_sal 에서 이름, 일당을 다 합친 주급을 출력하기


select ename, mon+tues+wed+thur+fri

 from week_sum_Sal;


근데 이렇게 일일이 더해서 SQL 문장을 작성하면 번거로운 코딩이 된다.


** PIVOTING INSERT 문으로 구현하기


create table sales_info

(ename varchar2(!0),

 sal      number(10), );


insert all into sales_info values(ename, mon)            --> into부터 쭉 복사해서 붙여놓고, 컬럼만 바꾸자

into sales_info values(ename, mon)

into sales_info values(ename, tues)

into sales_info values(ename, wed)

into sales_info values(ename, thur)

into sales_info values(ename, fri)

 

select ename, mon, tues, wed, thur, fri

 from week_sum_sal

 order by ename;



 

반응형

'나 취준생 > SQL' 카테고리의 다른 글

SQL - 유저 생성, 삭제, 권한 부여, 회수  (0) 2020.11.16
SQL - WITH 절  (0) 2020.11.13
SQL - 정규식 함수  (0) 2020.11.13
SQL - 외부 테이블 (external table)  (0) 2020.11.13
SQL - 3개 이상의 테이블 조인  (0) 2020.11.13