Programming/SQL

[Oracle] 서브쿼리 (SUBQUERY) / 다중행 서브쿼리(MULTI ROW SUBQUERY)

Jayna. 2024. 2. 20. 13:21
728x90

 

 

[Oracle] 서브쿼리 (SUBQUERY) / 단일행 서브쿼리(SINGLE ROW SUBQUERY)

SUBQUERY (서브쿼리) 하나의 주된 SQL문(SELECT, INSERT, UPDATE, DELETE, CREATE, ...) 안에 포함된 또 하나의 쿼리문. 메인 SQL문의 보조역할을 하는 쿼리문 >> 특정 사원과 같은 부서인 사원들을 조회화기 -- 홍

jaynarecord.tistory.com

 

서브쿼리 구분

서브쿼리를 수행한 결과값이 몇 행 몇 열이냐에 따라서 분류한다.

- 단일행 (단일열) 서브쿼리

- 다중행 (단일열) 서브쿼리 : 서브쿼리를 수행한 결과값이 여러 행일 떄

- (단일행) 다중열 서브쿼리

- 다중행 다중열 서브쿼리

 

다중행 서브쿼리(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 = '과장';

 

 

 

 

[Oracle] 서브쿼리 (SUBQUERY) / 다중열 서브쿼리 / 다중행 다중열 서브쿼리

서브쿼리 구분 서브쿼리를 수행한 결과값이 몇 행 몇 열이냐에 따라서 분류 - 단일행 (단일열) 서브쿼리 - 다중행 (단일열) 서브쿼리 - (단일행) 다중열 서브쿼리 : 서브쿼리를 수행한 결과값이 여

jaynarecord.tistory.com

 

728x90