DB-디비는 즐겁다

Oracle Database - 2) 다중행 서브쿼리

광형 2022. 7. 28. 23:21
728x90
728x90
SMALL

https://kwanghyung.tistory.com/entry/Oracle-Database-1-SUBQUERY

 

Oracle Database - 1) SUBQUERY

https://kwanghyung.tistory.com/entry/Oracle-Database-2JOIN Oracle Database - 2)JOIN https://kwanghyung.tistory.com/entry/Oracle-Database-1JOIN Oracle Database - 1)JOIN https://kwanghyung.tistory.com..

kwanghyung.tistory.com

1.다중행 서브쿼리 

서브쿼리의 조회 결과값이 여러 행일 경우 

1) IN (100,200,300) 서브쿼리 : 여러개의 결과값중에서 하나라도 일치하는것이 있다면 

그 반대 값으로 NOT IN 은 없다면 입니다 .

2-1) > ANY (100,200,300) 서브쿼리 : 여러개의 결과 값중에서 하나라도 클 경우를 말합니다. 

2-2) < ANY (100,200,300) 서브쿼리 : 여러개의 결과값중에서 하나라도 작을 경우를 말합니다. 

3-1) > ALL : 여러개의 결과값의 모든 값보다 클 경우를 말합니다. 

3-2) < ALL : 여러개의 결과값의 모든 값보다 작을 경우를 말합니다. 

연습문제1) 각 부서 별 최고 급여를 받는 사원의 이름, 직급코드, 급여 조회

SELECT EMP_NAME,JOB_CODE, SALARY
FROM EMPLOYEE
WHERE SALARY IN (SELECT MAX(SALARY)
                 FROM EMPLOYEE
                 GROUP BY DEPT_CODE);

연습문제2) 아이유 또는 박은빈 사원과 같은 직급인 사원들을 조회하시오 (사원명, 직급코드, 부서코드, 급여)

SELECT EMP_NAME,JOB_CODE,DEPT_CODE,SALARY
FROM EMPLOYEE
WHERE JOB_CODE IN (SELECT JOB_CODE
                    FROM EMPLOYEE
                    WHERE EMP_NAME IN ('아이유','박은빈'));

 2.(단일행) 다중열 서브쿼리
    서브쿼리 조회 결과가 값은 한 행이지만, 나열된 컬럼의 개수가 여러개일 경우를 말합니다.

연습문제3) 우영우 사원과 같은 부서코드, 같은 직급코드에 해당하는 사원들 조회(사원명, 부서코드, 직급코드, 입사일)

SELECT EMP_NAME,DEPT_CODE,JOB_CODE,HIRE_DATE
FROM EMPLOYEE
WHERE (DEPT_CODE,JOB_CODE) = (SELECT DEPT_CODE,JOB_CODE
                                FROM EMPLOYEE
                                WHERE EMP_NAME='우영우';

3.다중행 다중열 서브쿼리
    
    서브쿼리 조회 결과가 여러행 여러 컬럼일 경우

연습문제1) 각 직급별 최소 급여를 받는 사원들 조회(사번,이름,직급코드,급여)

SELECT EMP_ID,EMP_NAME,JOB_CODE,SALARY
FROM EMPLOYEE
WHERE (JOB_CODE,SALARY) IN (SELECT JOB_CODE, MIN(SALARY)
                            FROM EMPLOYEE
                            GROUP BY JOB_CODE);

4.인라인뷰(INLINE VIEW)
        FROM절에 서브쿼리를 제시하는것을 말합니다.

연습문제1) 보너스 포함 연봉이 3000만원 이상인 사원들의 사번,이름,보너스 포함 연봉,부서코드를 조회(인라인뷰 사용)

SELECT EMP_NAME
FROM (
            SELECT EMP_ID,EMP_NAME,((SALARY+(SALARY*NVL(BONUS,0)))*12) 연봉,DEPT_CODE
            FROM EMPLOYEE
            WHERE ((SALARY +(SALARY*NVL(BONUS,0)))*12) >=30000000
            )                                        -- 보너스포함 연봉이 3000만원 이상인 사원들의 이름
WHERE DEPT_CODE IS NOT NULL;

 

 

 

728x90
300x250
LIST