Data Base

Oracle) 다중행 Sub Query

5_jinseok12 2018. 5. 4. 15:21
728x90

다중행 Sub Query (Multi Row Sub Query) 란?

 

Sub Query의 결과가 2건 이상 출력되는 것을 말한다.

결과가 여러개 출력되기 때문에 단일행 연산자(<,>,=)를 사용할 수 없다

다중행에서 사용하는 연산자는 따로 있다

 

 

IN         : 서브 쿼리 결과와 같은 값을 찾는다

EXISTS   : Sub Query의 값이 있을 경우 메인 쿼리를 수행한다.

>ANY    : 서브 쿼리 결과 중에서 최솟값을 반환.  (  >MIN  과 같다)

<ANY    : 서브 쿼리 결과 중에서 최댓값을 반환   (  <MAX 과 같다)

<ALL     : 서브 쿼리 결과 중에서 최솟값을 반환   (  <MIN 과 같다)

>ALL     : 서브 쿼리 결과 중에서 최댓값을 반환   (  >MAX과 같다)

 

주의할 점은 IN 은 ' = ' 와 같은 역할을 하지만 IN 대신 = 를 사용할 순 없다.

 

문제 1)

Student 테이블을 조회하고 전체 학생중에서 2학년 학생들의 가장 적게 나가는 체중보다

더 적게 나가는 학생의 이름과 학년 몸무게를 출력하시오

 

[그림 1] 서브 쿼리 결과 비교

위와 같은 문제지만 방식을 다르게 사용하여 < MIN 을 사용한다.

[그림 2] MIN 함수 이용

 

 

문제 2)

emp2 테이블을 사용하여 전체 직원 중 'Section head' 직급의 최소 연봉자보다

연봉이 높은 사람의 이름과 직급, 연봉을 출력하시오

(단, 연봉 출력 형식은 천 단위 구분 기호와 $ 표시를 하라)

 

[그림 3] MIN 함수를 이용 (2)

 

TO_CHAR(pay, '$999,999') 를 통해 pay의 출력값을 천 단위로 나누며 앞에 $기호를 붙인다

MIN(pay) 는 최소 연봉을 나타낸다.

즉 EMP2 테이블의 Section head 직급의 최소연봉보다 작은 연봉을 출력한다.

 

 

문제 3)

emp2 테이블과 dept2 테이블을 조회하여 각 부서별 평균 연봉을 구하고 그중에서 평균 연봉이

가장 적은 부서의 평균 연봉보다 적게 받는 직원들의 부서명, 직원, 연봉을 출력하라

 

[그림 4] 다중 쿼리 결과값

 

 

 

 

반응형

'Data Base' 카테고리의 다른 글

Oracle) PL/SQL Cursor(커서)  (0) 2018.07.11
Oracle) PL/SQL 개념  (0) 2018.07.10
Oracle) 단일행 Sub Query  (0) 2018.05.04
Oracle) MAX/MIN 함수, RANK 함수  (0) 2018.05.04
Oracle) DECODE 함수 , TO_CHAR 함수 , CASE문  (0) 2018.04.09