-
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