<상관 서브쿼리>
일반적인 서브쿼리 방식은 서브쿼리가 만들어낸 고정된 결과값을 메인쿼리가 가져다가 사용하는 구조이나
상관서브쿼리는 반대로 메인 쿼리의 테이블값을 가져다가 서브쿼리에서 이용해서 결과를 만듦
예시1) 본인의 직급별 평균 급여보다 더 많이 받는 직원의 이름, 직급코드, 급여 조회
SELECT E.EMP_NAME,E.JOB_CODE,E.SALARY
FROM EMPLOYEE E
WHERE SALARY > (SELECT AVG(SALARY)
FROM EMPLOYEE
WHERE JOB_CODE =E.JOB_CODE);
예시2) 보너스가 본인 부서의 평균 보너스보다 많은 사람들의 이름, 부서코드,급여, 보너스 조회
SELECT EMP_NAME,E.DEPT_CODE,BONUS
FROM EMPLOYEE E
WHERE BONUS > (SELECT AVG(BONUS)
FROM EMPLOYEE
WHERE DEPT_CODE = E.DEPT_CODE);
>>상관 서브쿼리이면서 서브쿼리의 결과값이 매번 1개일 경우 "스칼라" 라고도 함
스칼라 서브쿼리의 특징 - 서브쿼리의 수행횟수를 최소화 하기위해 입력값과 출력값을 내부 캐시라는 공간에 저장해둠
입력값을 캐시에서 찾아보고 거기에 있으면 출력값을 리턴하고, 없으면 서브쿼리가 수행되도록
예시3) 전체사원의 사번,이름,직급코드, 직급명 조회
SELECT EMP_ID, EMP_NAME,E.JOB_CODE, --JOB테이블로 부터 직급코드가 E.JOB_CODE와 일치하는 직급명
(
SELECT JOB_NAME
FROM JOB
WHERE JOB_CODE = E.JOB_CODE
)
FROM EMPLOYEE E;
예시4) 전사원의 사번, 이름, 사수사번, 사수명조회
SELECT EMP_ID, EMP_NAME,--E.MANAGER_ID,
NVL((
SELECT EMP_NAME
FROM EMPLOYEE
WHERE EMP_ID = E.MANAGER_ID
),'없음') "사수명"
FROM EMPLOYEE E;
'ORACLE' 카테고리의 다른 글
ORACLE 06. DDL (CREATE)_ 제약조건(CONSTRAINTS) (0) | 2022.11.22 |
---|---|
ORACLE 06. DDL (CREATE) (0) | 2022.11.22 |
ORACLE 05. SELECT_ 서브쿼리(SUBQUERY)_ 인라인뷰 (0) | 2022.11.18 |
ORACLE 05. SELECT_ 서브쿼리(SUBQUERY) (1) | 2022.11.18 |
ORACLE 04. SELECT_ JOIN _다중조인 (0) | 2022.11.17 |