728x90
서브쿼리 구분
서브쿼리를 수행한 결과값이 몇 행 몇 열이냐에 따라서 분류한다.
- 단일행 (단일열) 서브쿼리
- 다중행 (단일열) 서브쿼리 : 서브쿼리를 수행한 결과값이 여러 행일 떄
- (단일행) 다중열 서브쿼리
- 다중행 다중열 서브쿼리
다중행 서브쿼리(MULTI ROW SUBQUERY)
서브쿼리의 조회 결과값이 여러 행일때
IN : 여러 개의 결과값 중에서 한 개라도 일치하는 값이 있으면 IN
NOT IN : 아예 없으면 NOT IN
> ANY : 여러 개의 결과값 중에서 하나라도 클 경우
< ANY : 여러 개의 결과갑 중에서 하나라도 작을 경우
728x90
>> 각 부서별 최고급여를 받는 사원 조회
--1) 각 부서별 최고 급여
SELECT MAX(SALARY)
FROM EMPLOYEE
GROUP BY DEPT_CODE; -- 2000000, 2500000, 2700000, 3000000, 3500000
--2) 위 급여를 받는 사람들 조회
SELECT EMP_NAME
, JOB_CODE
, SALARY
FROM EMPLOYEE
WHERE SALARY IN (2000000, 2500000, 2700000, 3000000, 3500000);
--3) 1) + 2) 합치기
SELECT EMP_NAME
, JOB_CODE
, SALARY
FROM EMPLOYEE
WHERE SALARY IN (SELECT MAX(SALARY)
FROM EMPLOYEE
GROUP BY DEPT_CODE);
>> 특정 사원들과 같은 부서 사원 조회
SELECT EMP_NAME
, DEPT_CODE
, SALARY
FROM EMPLOYEE
WHERE DEPT_CODE IN ( SELECT DEPT_CODE
FROM EMPLOYEE
WHERE EMP_NAME IN ('홍길동', '김길동'));
-- 차장 직급 보다 급여를 많이 받는 과장 조회
-- ALL 사용
-- 차장 월급 조회
SELECT SALARY
FROM EMPLOYEE
JOIN JOB USING (JOB_CODE)
WHERE JOB_NAME = '차장';
SELECT EMP_ID
, EMP_NAME
, JOB_NAME
, SALARY
FROM EMPLOYEE
JOIN JOB USING (JOB_CODE)
WHERE SALARY > ALL(SELECT SALARY
FROM EMPLOYEE
JOIN JOB USING (JOB_CODE)
WHERE JOB_NAME = '차장')
AND JOB_NAME = '과장';
728x90
'Programming > SQL' 카테고리의 다른 글
[Oracle] 인라인 뷰(INLINE-VIEW) / RANK() OVER / DENSE_RANK() OVER / ROWNUM (0) | 2024.02.20 |
---|---|
[Oracle] 서브쿼리 (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 |
[Oracle] 조인(JOIN) : 자체조인(SELF JOIN) / 다중 JOIN (1) | 2024.02.13 |