본문 바로가기

database/oracle

10. 서브쿼리(단일 행, 다중 행, 예제)

 

단일행 서브쿼리

서브쿼리의 실행결과가 하나의 칼럼과 하나의 행만을 리턴해주는 쿼리 (하나의 데이터만 리턴해주는 쿼리)

 

 복수행 서브쿼리

서브쿼리의 실행결과가 하나의 칼럼과 여러개의 행을 리턴해주는 쿼리 (여러개의 데이터만 리턴해주는 쿼리)

 

 

SELECT 문 안에 SELECT 문이 추가로 들어갈 수 있다.

 

기존상태

 

 

 

 

 

 

 

존스가 근무하는 부서의 이름을 출력해보자.

 

서브쿼리가 메인쿼리보다 실행이 빨리된다.

 

스미스가 근무하는 부서의 이름을 출력해보자.

 

 

'ALLEN' 과 같은 부서에서 근무하는 사원의 이름과 부서의 번호를 출력해 보세요.

 

'ALLEN' 과 동일한 직책(job) 을 가진 사원의 사번과 이름, 직책을 출력해 보세요.

 

 

'ALLEN' 의 급여와 동일하거나 더 많이 받는 사원의 이름과 급여를 출력해 보세요.

 

 

'DALLAS' 에서 근무하는 사원의 이름, 부서번호를 출력해보세요.

 

 

'SALES' 부서에서 근무하는 모든 사원의 이름과 급여를 출력해보세요.

 

 

자신의 직속 상관이 'KING' 인 사원의 이름과 급여를 출력해 보세요.

 

 

 

다수의 행이 SELECT 되기 때문에 단일행 서브쿼리에서는 동등연산자를 사용할 수 없다. 

 

 

다중행 서브쿼리

다중행 서브쿼리의 결과값을 조건절에서 사용할때는 반드시 다중행 연산자와 함께 사용해야한다. ( IN, ALL, ANY, EXIST)

 

 

1. 급여를 3000 이상받는 사원이 소속된 부서와 동일한 부서에서 근무하는 사원들의 이름과 급여, 부서번호를 출력해 보세요.

 

 

2. IN 연산자를 이용하여 부서별로 가장 급여를 많이 받는 사원의 사원번호, 급여, 부서번호를 출력해보세요.

 

 

3. 직책이 MANAGER 인 사원이 속한 부서의 부서번호와 부서명과 부서의 위치를 출력해보세요.

 

 

4. 30번 부서의 사원중에서 급여를 가장 많이 받는 사원보다 더 많은 급여를 받는 사원의 이름과 급여를 출력해보세요.

 

단일행 서브쿼리

SELECT ename,sal

FROM emp

WHERE sal > (SELECT MAX(sal) FROM emp GROUP BY deptno HAVING deptno=30);

 

다중행 서브쿼리

SELECT ename,sal

FROM emp

WHERE sal > ALL(SELECT sal FROM emp WHERE deptno=30);

 

5. 직책이 'SALESMAN' 보다 급여를 많이 받는 사원들의 이름과 급여를 출력하라. (ANY 연산자 이용)

 

SALESMAN의 최소 값보다 큰 사원들이 출력된다.

 

 

6. 부서번호가 30번인 사원들의 급여중 최저 급여보다 높은 급여를 받는 사원의 이름, 급여를 출력해보세요.

 

단일 행 서브쿼리

SELECT ename,sal

FROM emp

WHERE sal > (SELECT MIN(sal) FROM emp GROUP BY deptno HAVING deptno=30);

 

다중 행 서브쿼리

SELECT ename,sal

FROM emp

WHERE sal > ANY(SELECT sal FROM emp WHERE deptno=30);

 

7. 직책이 'SALESMAN' 인 사원의 최소 급여보다 많이 받는 사원들의 이름과 급여, 직책을 출력하되 'SALESMAN' 은 출력하지 않습니다. (ANY 연산자를 사용하세요)

 

 

8. SMITH 와 동일한 직책을 가진 사원의 이름과 직책을 출력하세요

 

 

9. 직책이 'SALESMAN' 인 사원이 받는 급여들의 최대 급여보다 많이 받는 사원들 의 이름과 급여를 출력하되 부서번호가 20번인 사원은 제외한다. (ALL 연산자 이용)

 

 

10. 직책이 'SALESMAN' 인 사원이 받는 급여들의 최소 급여보다 많이 받는 사원 들의 이름과 급여를 출력하되 부서번호가 20번인 사원은 제외한다. (ANY 연산자 이용)

 

 

 

'database > oracle' 카테고리의 다른 글

oracle 웹에서 확인하기  (0) 2022.07.15
11. oracle (LEAD, LAG)  (0) 2022.07.15
oracle 복습  (0) 2022.07.15
oracle quiz  (0) 2022.07.14
9. oracle(JOIN)  (0) 2022.07.14