mun dev

[SQL] 서브 쿼리 활용(INSERT, UPDATE, DELETE, MERGE) 본문

DB

[SQL] 서브 쿼리 활용(INSERT, UPDATE, DELETE, MERGE)

mndev 2024. 2. 6. 10:27

1. 서브쿼리 사용하여 데이터 입력

  • emp테이블의 구조만 가져와서 emp2 테이블을 생성
create table emp2
as
    select *
    from emp
    where  1 = 2;
  • values절에 values대신 입력하고자 하는 서브 쿼리문을 작성
  • 부서번호가 10번인 사원들의 데이터를 emp2 테이블에 입력하는 것
insert into emp2(empno, ename, sal, deptno)
select empno, ename, sal, deptno
from emp
where deptno = 10;

2. 서브쿼리를 사용하여 데이터 수정하기

  • 직업이 SALESMAN인 사원들의 월급을 ALLEN의 월급으로 변경
  • SET절에 서브쿼리를 사용하여 직업이 SALESMAN인 사원들의 월급을 ALLEN월급으로 갱신
update emp
set sal = (select sal
                        from  emp
                        where ename = 'ALLEN' )
where job = 'SALESMAN';
  • update문은 모든 절(update, set, where)에서 서브쿼리를 사용할 수 있음
update emp
set(sal, comm) = (select sal, comm
                                    from emp
                                    where ename = 'ALLEN' )
where ename = 'SCOTT';

3. 서브쿼리를 사용하여 데이터 삭제하기

  • SCOTT보다 더 많은 월급을 받는 사원들을 삭제
delete from emp
where sal > (select sal
                         from emp
                         where ename = 'SCOTT');

4. 서브쿼리를 사용하여 데이터 합치기

  • 사원 테이블을 이용해 SUMSAL 컬럼의 데이터를 부서 테이블의 부서 번호별 토탈 월급으로 갱신

  • using절에 서브쿼리를 사용해 출력하는 데이터 dept 테이블을 merge

      merge into dept d
      using (select deptno, sum(sal) sumsal
             from emp
             group by deptno) v
      on (d.deptno = v.deptno)
      when matched then
      update set d.sumsal = v.sumsal;