ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Oracle - 결과가 하나 이상인 서브쿼리(IN, ANY, ALL)
    DataBase/Oracle 2024. 8. 20. 22:50
    반응형

     

     

    1. IN

    IN은 서브쿼리가 반환한 여러 값 중에서 특정 값이 존재하는지를 확인할 때 사용합니다. 서브쿼리가 반환한 결과가 여러 개일 때, 주어진 값이 그 중 하나와 일치하면 참(True)을 반환합니다.

     

    예시:

    SELECT name
    FROM employees
    WHERE department_id IN (
        SELECT department_id
        FROM departments
        WHERE location_id = 100
    );

    위 쿼리는 location_id가 100인 부서에 속한 직원의 이름을 조회하는 쿼리입니다. 서브쿼리가 반환하는 부서 ID들 중 하나라도 직원의 부서 ID와 일치하는 경우, 해당 직원의 이름을 출력합니다.

     

    3000이상의 급여를 받는 사원들과 같은 부서에 근무하고 있는 사원의 사원번호, 이름, 급여를 가져온다.
    SELECT empno, ename, sal
    FROM emp
    WHERE deptno in (SELECT deptno
                FROM EMP
                WHERE sal >= 3000);

     

     

    직무가 CLERK인 사원과 동일한 부서에 근무하고 있는 사원들의 사원번호, 이름, 입사일 가져온다.
    SELECT empno, ename, hiredate
    FROM EMP e 
    WHERE deptno in (SELECT deptno
    			FROM EMP e 
    			WHERE job = 'CLERK');

     

     

    KING을 직속상관으로 가지고 있는 사원들이 근무하고 있는 근무 부서명, 지역을 가지고 온다.
    SELECT dname, loc 
    FROM dept
    WHERE deptno in (SELECT deptno
                FROM EMP
                WHERE mgr = (SELECT empno
                            FROM EMP
                            WHERE ename = 'KING'));

     

    CLERK들의 직속상관의 사원번호, 이름, 급여를 가져온다.
    SELECT deptno, ename, sal
    FROM emp
    WHERE empno in (SELECT mgr
                	FROM emp 
                	WHERE job = 'CLERK');

     

     

    2. ALL

    ALL은 서브쿼리에서 반환된 모든 값과 비교하여 조건을 만족하는 경우 참(True)을 반환합니다. 즉, 서브쿼리 결과의 모든 값이 조건을 만족해야만 참이 됩니다.

     

    예시:

    SELECT salary
    FROM employees
    WHERE salary > ALL (
        SELECT salary
        FROM employees
        WHERE department_id = 10
    );

    이 쿼리는 부서 10의 모든 직원의 급여보다 높은 급여를 받는 직원을 조회하는 쿼리입니다. 서브쿼리에서 반환된 모든 급여보다 크면 참(True)으로 평가되어 급여가 출력됩니다.

     

    각 부서별 급여 평균보다 더 많이 받는 사원의 사원번호, 이름, 급여를 가져온다.
    SELECT deptno, ename, sal
    FROM EMP 
    WHERE sal > ALL (SELECT avg(sal) 
    			FROM emp
    			GROUP BY deptno);

     

     

    각 부서별 급여 최저치보다 더 많이 받는 사원들의 사원번호, 이름, 급여를 가져온다.
    SELECT deptno, ename, sal
    FROM emp
    WHERE sal > ALL (SELECT MIN(sal) 
                    FROM emp
                    GROUP BY deptno);

     

     

    SALESMAN보다 급여를 적게 받는 사원들의 사원번호, 이름, 급여를 가져온다.
    SELECT deptno, ename, sal
    FROM emp
    WHERE sal < ALL (SELECT sal
                    FROM emp
                    WHERE job = 'SALESMAN');

     

     

    각 부서별 급여 최저액보다 많이 받는 사원들의 사원번호, 이름, 급여를 가져온다.
    SELECT empno, ename, sal  
    FROM emp
    WHERE sal > any (SELECT MIN(sal) 
    		FROM emp
    		GROUP BY deptno);

     

     

    DALLAS에 근무하고 있는 사원들 중 가장 나중에 입사한 사원의 입사 날짜보다 더 먼저 입사한 사원들의 사원번호, 이름, 입사일을 가져온다.
    SELECT EMPNO, ename, HIREDATE 
    FROM emp
    WHERE HIREDATE < ALL (SELECT HIREDATE 
                        FROM emp
                        WHERE deptno = (SELECT deptno
                                        FROM DEPT
                                        WHERE LOC ='DALLAS'))

     

     

    3. ANY

    ANY는 서브쿼리에서 반환된 결과 중 하나라도 조건을 만족하면 참(True)을 반환합니다. 주로 비교 연산자와 함께 사용됩니다.

    예시:

    SELECT salary
    FROM employees
    WHERE salary > ANY (
        SELECT salary
        FROM employees
        WHERE department_id = 10
    );

    이 쿼리는 부서 10에 속한 직원 중 최소 한 명의 급여보다 높은 급여를 받는 직원의 급여를 출력합니다. 서브쿼리 결과에서 반환된 급여 중 하나라도 비교하여 크면 해당 급여를 출력합니다.

     

    요약:

    • IN: 서브쿼리에서 반환된 값들 중 하나라도 일치하면 참.
    • ANY: 서브쿼리에서 반환된 값 중 하나라도 조건을 만족하면 참.
    • ALL: 서브쿼리에서 반환된 모든 값이 조건을 만족해야 참.
    반응형

    'DataBase > Oracle' 카테고리의 다른 글

    Oracle - Insert 개념정리  (0) 2024.08.27
    Oracle - SET(UNION, UNION ALL, INTERSECT, MINUS)  (0) 2024.08.21
    Oracle - 서브쿼리(Sub query)  (0) 2024.08.19
    Oracle - Self Join, Outer Join  (0) 2024.08.15
    Oracle - Join 문제와 함께 파해치  (0) 2024.08.14

    댓글

Designed by Tistory.