쿼리 질문 드립니다. 0 2 1,645

by 최재남 [SQL Query] 쿼리 [2012.04.23 23:15:54]


안녕하세요. 쿼리문 질문 좀 드리겠습니다.

==========================================================
DELETE month_salary a
WHERE EXISTS (
     SELECT 1
                             FROM employees emp
                             WHERE emp.department_id = a.department_id
                                   AND sum(emp.salary) = 51600
                             GROUP BY emp.department_id
                             HAVING COUNT(*) = a.emp_count
                             
         );
=========================================================

위의 쿼리문에서 서브쿼리에 있는 where ( and 포함 ) 절과 having 절의 조건에 맞는 데이타가

존재할때 ( = select 1 로 나올때 )  DELETE 문에 의해 month_salary 의 전체 데이타가 삭제 되는게

맞는지요?
by 마농 [2012.04.24 08:20:31]

[전체 데이터 삭제]라는 표현은 조금 거시기하거고...
[조건을 만족하는 데이터 삭제]라는 표현이 맞을 듯 하구요.
서브쿼리가 단독으로 수행될 때는 제공자 역할을 하는 서브쿼리라 하고
이 경우엔 서브쿼리가 단독으로 수행된것이 아니라 메인쿼리의 컬럼과 비교하고 있으므로
이 경우에는 확인자 역할을 한다고 합니다.
제공자 역할은 서브쿼리 수행결과를 메인쿼리에 조건으로 제공하는 것이고
확인자 역할은 메인쿼리의 매행마다 서브쿼리를 수행하여 확인하는 과정을 거치게 됩니다.
메인(a)의 매 행마다 a.department_id 를 조건으로 서브쿼리를 수행해서 결과가 있는지 확인하고
결과가 있으면 a의 해당 레코드를 삭제합니다.


위의 쿼리에서 sum 조건은 Where 절에 올 수 없습니다.
sum 조건은 Having 절에 주셔야 합니다.


by 보청기 [2012.04.26 15:24:58]
너무 감사드리며 많은 도움 되었습니다. (--)(__)
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입