다중 행 서브쿼리란?
- 다중 행 서브 쿼리는 반드시 다중 행 연산자(Multiple Row Operator)와 함께 사용됩니다.
- 결과가 2개 이상 구해진 쿼리문을 서브 쿼리로 기술할 경우에는 다중 행 연산자와 함께 사용해야 합니다.
종류 |
의미 |
IN |
메인 쿼리의 비교 조건 ('=' 연산자로 비교할 경우)이 서브 쿼리의 결과 중에서 하나라도 일치하면 참입니다. |
ANY, SOME |
메인 쿼리의 비교 조건이 서브 쿼리의 검색 결과와 하나 이상이 일치하면 참입니다. |
ALL |
메인 쿼리의 비교 조건이 서브 쿼리의 검색 결과와 모든 값이 일치하면 참입니다. |
EXIST |
메인 쿼리의 비교 조건이 서브 쿼리의 결과 중에서 만족하는 값이 하나라도 존재하면 참입니다. |
EX) 10번 부서에 근무하는 사원의 이름과 10번 부서의 부서명을 출력
EX) 평균 급여를 구하는 쿼리문을 서브 쿼리로 사용하여 평균 급여보다 더 많은 급여를 받는 사원을 검색하는 쿼리 예제
IN 연산자
- 메인 쿼리의 비교 조건 ('=' 연산자로 비교할 경우)이 서브 쿼리의 결과 중에서 하나라도 일치하면 참입니다.
EX) 3000 이상 받는 사원이 소속된 부서(10번, 20번)와 동일한 부서에서 근무하는 사원이기에 서브 쿼리의 결과 중에서 하나라도 일치하면 참인 결과를 구하는 IN 연산자와 함께 사용되어야 합니다.
EX) 부서별로 가장 급여를 많이 받는 사원의 정보(사원 번호, 사원 이름, 급여, 부서 번호)를 출력하시오.
EX) 직급(JOB)이 MANAGER인 사람이 속한 부서의 부서 번호와 부서명과 지역을 출력하시오.
ALL 연산자
- ALL 조건은 메인 쿼리의 비교 조건이 서브 쿼리의 검색 결과와 모든 값이 일치하면 참입니다.
- 찾아진 값에 대해서 AND 연산을 해서 모두 참이면 참이 되는 셈이 됩니다.
- 컬럼명 > ALL 은 "컬럼명의 모든 비교값 보다 크냐"고 묻는 것이 되므로 최대값보다 더 크면 참이 됩니다.
EX) 30번 소속 사원들 중에서 급여를 가장 많이 받는 사원보다 더 많은 급여를 받는 사람의 이름, 급여를 출력하는 쿼리문을 작성해봅시다.
EX) 영업 사원들 보다 급여를 많이 받는 사원들의 이름과 급여와 직급(담당 업무)를 출력하되 영업 사원은 출력하지 않습니다.
ANY 연산자
- ANY 조건은 메인 쿼리의 비교 조건이 서브 쿼리의 검색 결과와 하나 이상만 일치하면 참입니다.
- 컬럼명 > ANY 는 찾아진 값에 대해서 하나라도 크면 참이 되는 셈이 됩니다. 그러므로 찾아진 값 중에서 가장 작은 값 즉, 최소값 보다 크면 참이 됩니다.
EX) 부서번호가 30번인 사원들의 급여 중 가장 작은 값(950)보다 많은 급여를 받는 사원의 이름, 급여를 출력하는 예제를 작성해봅시다.
EX) 영업 사원들의 최소 급여보다 많이 받는 사원들의 이름과 급여의 직급을 출력하되 영업사원은 출력하지 않습니다.
'2. Database > 2_1 Oracle' 카테고리의 다른 글
[Oracle] ALTER TABLE ADD - 컬럼 추가하는 방법 (0) | 2020.03.22 |
---|---|
[Oracle] UNION과 UNION ALL의 개념 및 예제 쿼리 (0) | 2020.03.20 |
[Oracle] SUM, AVG - 총합과 평균을 구하는 함수 (0) | 2020.03.19 |
[Oracle] TO_NUMBER 함수 - 문자를 숫자로 바꿔주는 형 변환① (0) | 2020.03.19 |
[Oracle] ORDER BY - 정렬 순서 정하는 방법 (0) | 2020.03.19 |