다연이네

[days08] 한번에 여러 데이터 insert하기 / 다중 insert 문 본문

Oracle

[days08] 한번에 여러 데이터 insert하기 / 다중 insert 문

 다연  2020. 11. 9. 19:49
반응형

1. 서브쿼리를 사용하여 한번에 여러 데이터 추가하기

select *
from emp
where deptno = 10; --이걸 통째로 추가하겠다

 

이제까지는 insert into 테이블명(컬럼명...) values (컬럼값...); 이렇게 배웠는데

서브쿼리를 이용하면 insert into tbl_emp10(deptno, empno, ename, hiredate)

 

예) 10번 부서의 사원정보를 테이블에 insert 하기

insert into tbl_emp10(deptno, empno, ename, hiredate) 
select deptno, empno, ename, hiredate
from emp
where deptno = 10;

1. 다중 insert 문

insert into tbl_emp10 select * from emp;
insert into tbl_emp20 select * from emp;
insert into tbl_emp30 select * from emp;

위처럼 insert를 3줄로 쓰지 않고 다중 insert문을 사용하겠다

- unconditional insert all 

insert all --all | first 
  into tbl_emp10 values (empno, ename, job, mgr, hiredate, sal, comm,deptno)
  into tbl_emp20 (empno, ename, deptno) values (empno, ename, deptno)
  into tbl_emp30 values (empno, ename, job, mgr, hiredate, sal, comm,deptno)
  select * from emp; --36개행 삽입 (12개씩)

모든 12명 사원의 정보를 -> tbl_emp10,20,30에 12명씩 채워넣었다

근데 마치 if문처럼 10번부서원들만 10테이블에, 20부서원은 20테이블에 30사원은 30테이블에만 채워넣고 싶다
- conditional insert all 

 insert all
    when deptno=10 then into tbl_emp10 values (empno, ename, job, mgr, hiredate, sal, comm,deptno)
    when deptno=20 then into tbl_emp20 values (empno, ename, job, mgr, hiredate, sal, comm,deptno)
    else  into tbl_emp30 values (empno, ename, job, mgr, hiredate, sal, comm,deptno)
select * from emp; --12개 행 삽입

allfirst의 차이가 뭐야 ? 

all 대신에 first를 주면 첫번째 조건을 만족하면 뒤에꺼는 안물어보고 건너뜀

 

all.

insert all
    when deptno=10 then 
    into tbl_emp10 values(empno, ename, job, mgr, hiredate, sal, comm,deptno)
    when  job='CLERK' then 
    into tbl_emp20 values(empno, ename, job, mgr, hiredate, sal, comm,deptno) 
    --만일 deptno=10이고 job='CLERK'인 사람은 first쓰면 뒤까지 안보니까
    --tbl_emp20에 추가 안됨 (all은 됨)
select * from emp;

tbl_emp10
tbl_emp20

first.

insert first--first를 주면 첫번째 조건을 만족하면 뒤에꺼는 안물어보고 건너뛴다
    when deptno=10 then 
    into tbl_emp10 values(empno, ename, job, mgr, hiredate, sal, comm,deptno)
    when  job='CLERK' then 
    into tbl_emp20 values(empno, ename, job, mgr, hiredate, sal, comm,deptno) 
    select * from emp;

tbl_emp10
tbl_emp20

- Pivoting insert 문

create table sales(
employee_id       number(6), --사원번호(ID)
week_id            number(2), --주번호(ID)
sales_mon          number(8,2), --각 요일 판매량
sales_tue          number(8,2),
sales_wed          number(8,2),
sales_thu          number(8,2),
sales_fri          number(8,2)
);

insert into sales values(1101,4,100,150,80,60,120);
insert into sales values(1102,5,300,300,230,120,150);
commit;
select * from sales;

이 가로로 출력된 결과물을 세로로 바꾸고 싶다

create table sales_data(
employee_id        number(6),
week_id            number(2),
sales              number(8,2)
);

insert all
into sales_data values(employee_id, week_id, sales_mon)
into sales_data values(employee_id, week_id, sales_tue)
into sales_data values(employee_id, week_id, sales_wed)
into sales_data values(employee_id, week_id, sales_thu)
into sales_data values(employee_id, week_id, sales_fri)
select employee_id, week_id, sales_mon, sales_tue, sales_wed,
         sales_thu, sales_fri
from sales;

select * from sales_data; --월월화화수수목목금금

 

 

반응형
Comments