[학습목표]
📢 서브쿼리의 구분
간단한 예시 (1)
✨
1) 노옹철사원의 부서코드를 알아내는 쿼리문 작성 => 'D9'
2) 부서코드가 D9인 사원을 알아내는 쿼리문 작성 => 총 3명나옴
3) 1+2 쿼리문을 합치기 => 전 사원들 중에서 부서코드가 노옹철사원과 같은 부서인 사원 조회하기
간단한 예시(2)
✨
1) 전체 사원의 평균 급여 알아내는 쿼리문 작성 => 약 3백만원
2) 급여가 평균급여 이상인 사원 알아내는 쿼리문 작성 => 8명
3) 1+2 쿼리문을 합치기 => 전 사원들 중에서 급여가 평균급여보다 많은 사원 조회
간단한 예시(3)
✨
1) 메인 쿼리문을 작성하고 급여가 평균급여보다 작은 사원 조회
JOIN을 해서 서브쿼리 작성 가능
-- (3) 노옹철사원의 급여보다 더 많이 받는 사원의 사번, 이름, 부서코드, 급여, 부서명 조회
SELECT EMP_ID, EMP_NAME, DEPT_CODE, SALARY, DEPT_TITLE
FROM EMPLOYEE
JOIN DEPARTMENT D ON (E.DEPT_CODE = D. DEPT_ID) --부서명 알아냄
WHERE SALARY > (SELECT SALARY
FROM EMPLOYEE
WHERE EMP_NAME = '노옹철');
어려운 예시(1)
✨
1) 부서코드를 그룹으로 묶은 후, 부서별 급여합 중에서도 가장 큰 값 한개 조회
2) 부서별 급여합 중에 1번 값인 부서 조회
3) 1+2 쿼리문을 합치기 => 부서코드로 그룹짓고 그 중 급여의 합이 가장 큰 부서코드 조회
EX) 비교대상 > ANY 서브쿼리(값1, 값2 ''') => 비교대상 > 값1 OR 비교대상 > 값2
EX) 비교대상 > ALL 서브쿼리(값1, 값2 ''') => 비교대상 > 값1 AND 비교대상 > 값2
간단한 예시(1)
✨
1) 유재식과 윤은해 사원의 직급을 조회
2) 위 직급과 같은 사원들을 조회
3) 1+2 쿼리문을 합치기 => 직급코드가 유재식과 윤은해와 같은 사원 조회
어려운 예시(2)
✨
1) 직급명을 알아내야하므로 JOIN하고 직급명이 차장인 직원의 급여가
2) 부장보다 많은 사원
간단한 예시(1)
✨DEPT_CODE , JOB_CODE의 서브쿼리문 안에서도 순서가 동일해야함 !
간단한 예시(1)
✨ 1) 직급코드별 최소급여를 받는 사원들을 조회 (서브쿼리문)
2) 직급코드별 최소급여를 받는 사원들의 정보 조회
EX) 실시간검색어 1위~10위 / 쇼핑몰 베스트상품 / 쇼핑몰 신상품
예시 (1)
✨ 1) 인라인뷰 적용 전 > WHERE 절에 다시한번 조건식을 기술해야함(별칭사용불가)
2) 인라인뷰 적용 후 > FROM절 안에 서브쿼리를 작성함으로써 메인쿼리의 SELECT절에 별칭사용 가능, WHERE절에도 별칭사용 가능, 조건식이 간단해짐 !
-- 사원들 중, 급여가 가장 높은 상위 5명 조회하기 !
SELECT ROWNUM, E.*
FROM (SELECT EMP_NAME, SALARY, DEPT_CODE
FROM EMPLOYEE
ORDER BY SALARY DESC) E -- 별칭 부여 가능 !
WHERE ROUNUM <= 5;
-- 가장 최근에 입사한 사원 5명 조회(사원명, 급여, 입사일)
SELECT EMP_NAME, SALARY, HIRE_DATE
FROM (SELECT *
FROM EMPLOYEE
WHERE HIRE_DATE DESC) E
WHERE ROWNUM <= 5;