728x90
서브쿼리 구분
서브쿼리를 수행한 결과값이 몇 행 몇 열이냐에 따라서 분류
- 단일행 (단일열) 서브쿼리
- 다중행 (단일열) 서브쿼리
- (단일행) 다중열 서브쿼리 : 서브쿼리를 수행한 결과값이 여러 열일 때
- 다중행 다중열 서브쿼리 : 서브쿼리를 수행한 결과값이 여러행 여러열일 때
728x90
다중열 서브쿼리
조회 결과값은 하나의 행이지만 나열된 컬럼수가 여러 개일 때
--홍길동 사원과 같은 부서코드 AND 같은 직급코드에 해당하는 사원들 조회
-- 1) 홍길동 사원의 부서코드, 직급코드 조회
SELECT DEPT_CODE 부서코드
, JOB_CODE 직급코드
FROM EMPLOYEE
WHERE EMP_NAME = '홍길동'; -- D5 / J5
-- 2) 부서코드가 D5이면서 직급코드가 J5인 사원 조회
SELECT EMP_NAME
, DEPT_CODE
, JOB_CODE
FROM EMPLOYEE
WHERE DEPT_CODE = 'D5'
AND JOB_CODE = 'J5';
-- 1) + 2)
SELECT EMP_NAME
, DEPT_CODE
, JOB_CODE
FROM EMPLOYEE
WHERE DEPT_CODE = (SELECT DEPT_CODE
FROM EMPLOYEE
WHERE EMP_NAME = '홍길동')
AND JOB_CODE = (SELECT JOB_CODE
FROM EMPLOYEE
WHERE EMP_NAME = '홍길동');
-->> 다중열 서브쿼리
SELECT EMP_NAME
, DEPT_CODE
, JOB_CODE
FROM EMPLOYEE
WHERE (DEPT_CODE, JOB_CODE) = (SELECT DEPT_CODE --결과값이 1행인 여러 컬럼
, JOB_CODE
FROM EMPLOYEE
WHERE EMP_NAME = '홍길동');
다중행 다중열 서브쿼리
서브쿼리 조회 결과값이 여러행 여러 컬럼일 경우
--각 직급별 최소급여를 받는 사원들 조회
-- 1) 각 직급별 최소급여
SELECT JOB_CODE
, MIN(SALARY)
FROM EMPLOYEE
GROUP BY JOB_CODE;
/*
('J2',3000000)
('J1',2000000)
('J3',2500000)
('J5',3500000)
('J4',3300000)
*/
-- 2) 위의 목록들 중에 일치하는 사원
SELECT EMP_ID
, EMP_NAME
, JOB_CODE
, SALARY
FROM EMPLOYE
WHERE (JOB_CODE, SALARY) IN (('J2',3000000),
('J1',2000000),
('J3',2500000),
('J5',3500000),
('J4',3300000));
-- 1) + 2)
SELECT EMP_ID
, EMP_NAME
, JOB_CODE
, SALARY
FROM EMPLOYE
WHERE (JOB_CODE, SALARY) IN (SELECT JOB_CODE
, MIN(SALARY)
FROM EMPLOYEE
GROUP BY JOB_CODE);
-- 각 부서별 최고급여를 받은 사원들 조회
-- 1) 각 부서별 최고급여
SELECT NVL(DEPT_CODE, '부서없음')
, MAX(SALARY)
FROM EMPLOYEE
GROUP BY DEPT_CODE;
-- 2)
SELECT EMP_ID
, EMP_NAME
, NVL(DEPT_CODE, '부서없음')
, SALARY
FROM EMPLOYEE
WHERE (NVL(DEPT_CODE, '부서없음'), SALARY) IN (SELECT NVL(DEPT_CODE, '부서없음')
, MAX(SALARY)
FROM EMPLOYEE
GROUP BY DEPT_CODE)
ORDER BY EMP_ID;
728x90
'Programming > SQL' 카테고리의 다른 글
[Oracle] 계정생성 CREATE / 권한부여 GRANT (0) | 2024.02.20 |
---|---|
[Oracle] 인라인 뷰(INLINE-VIEW) / RANK() OVER / DENSE_RANK() OVER / ROWNUM (0) | 2024.02.20 |
[Oracle] 서브쿼리 (SUBQUERY) / 다중행 서브쿼리(MULTI ROW SUBQUERY) (0) | 2024.02.20 |
[Oracle] 서브쿼리 (SUBQUERY) / 단일행 서브쿼리(SINGLE ROW SUBQUERY) (0) | 2024.02.20 |
[Oracle] GROUP BY / HAVING절 / 집합 연산자 SET OPERATOR (UNION/ALL/INTERSECT/MINUS) (0) | 2024.02.15 |