본문 바로가기

Oracle/SQL

SQL 서브쿼리를 이용한 DATA 삭제 Delete

스캇보다 더많은월급 받는 사원들 삭제

delete from emp
where sal > (select sal 
             from emp
             where ename ='SCOTT');

SCOTT 과 같은 직업을 갖는 사원 삭제, SCOTT 은 제외 하고 삭제하시오

delete from emp 
where job = (select job
             from emp 
             where ename = 'SCOTT')
AND ENAME != 'SCOTT';

 allen 보다 늦게 입사한 사원들 삭제

delete from emp
where hiredate > (select hireate 
                  from emp
                  where ename ='ALLEN');

 

만약 서브쿼리를 이용한 Delete 문을 수행하지 않는다면 

쿼리문을 두번 실행하여 데이터를 삭제해야한다. 

마지막으로 예시를 들면, 월급이 부서번호의 평균 월급보다 크면 해당사원들을 삭제하는 쿼리를 작성하고 싶다면 

delete from emp m
where sal > (seect avg(sal)
             from emp s
             where s.deptno = m.deptno );

emp 테이블에 별칭을 주는 이유는 조인조건 절 때문인데 해당사원별로 평균월급보다 높은 사원을 지우는 것 이기때문에  메인쿼리 절에서 서브쿼리로와 조인조건절로 간 다음 그에 해당하는 avg(sal) 을 출력하여 결과값을 계산해야하기 때문이다~

emp 테이블을 따로 구분하여 별칭 주지않는다면 조인조건절을 입력 할 수 없다!