0. 문제 공통 조건
해당 테이블을 이용해서 소속 부서의 평균보다 급여가 높은 직원들을 출력하는 쿼리를 작성할 것
1. where을 활용하는 상호 연관 중첩 서브쿼리 (correlated nested subquery)
SELECT 사번, 월급, 부서명
FROM 직원 E1
WHERE E1.월급 > (SELECT AVG(월급)
FROM 직원
WHERE 부서명 = E1.부서명);
쿼리는 두 가지로 구성되어 있다
메인 쿼리는 직원 테이블에서
각 행이 월급에 대한 조건을 만족하는 경우
각 행의 사번과 월급, 부서명이 출력하도록 한다
where문의 부등호 뒤에 있는 select문이 서브쿼리이다
이 서브 쿼리는 부서의 평균 월급을 계산한다
메인 쿼리의 각 행과 연관되어서 동작하니 주의
메인쿼리에서 첫 번째 행에 방문했을 때
첫 번째 행의 부서명은 홍보
서브쿼리에서 직원 테이블 모든 행을 확인하며
메인 쿼리의 부서명인 홍보와 같은 행을 고르고
그 행들에 대한 월급의 평균을 구한다
서브 쿼리에서 출력된 홍보부의 평균 월급을
메인 쿼리에서 부서명 속성의 값이 홍보인 행들의 월급과 비교한다
메인 쿼리의 월급이 더 큰 경우
해당 행의 사번과 월급, 부서명을 출력한다
메인 쿼리는 해당 행에 대한 작업이 완료되면
다음 행으로 이동해서 같은 과정을 반복한다
예시 테이블에 의하면
모바일 부서에 대한 평균 월급을 구하고
김민수 과장과 강민호 차장의 월급을 부서 평균 월급과 비교해서
김민수 과장의 사번, 월급, 부서명을 출력하게 되는 것이다
이렇게 메인 쿼리의 각 행마다 서브 쿼리가 독립적으로 실행되는 것을 상호연관 서브 쿼리라고 하고
이 때문에 각 행의 부서명에 따라 평균 월급이 독립적으로 계산되고
각 행마다 비교하는 조건 값이 달라지게 된다
결론적으로 메인 테이블의 모든 행에 대해 메인 쿼리 작업이 종료되면
소속 부서의 평균 월급보다 높은 직원의 사번, 월급, 부서명이 출력된 것이다
'[ Computer Science ] > Database_sql' 카테고리의 다른 글
[Database/MySQL] subquery 활용 연습 (2) from 조건에 중첩 (0) | 2024.11.07 |
---|---|
[Database/MySQL] 기초 쿼리문 연습 (1) | 2024.10.22 |
[Database/midterm] SQL 문법 기초 (11) | 2024.10.19 |
[Database/midterm] 데이터베이스 설계 (개념적, 논리적) (2) | 2024.10.19 |
[Database/MySQL] 실습을 위한 초기 데이터 생성 (4) | 2024.10.17 |
[프로그래머스/MySQL] Lv. 1 평균 일일 대여 요금 구하기 (SELECT) (7) | 2024.10.17 |
[프로그래머스/MySQL] Lv. 1 역순 정렬하기 (SELECT) (0) | 2024.10.17 |