2008. 8. 20. 16:06
Chap 8. 서브쿼리
2008. 8. 20. 16:06 in 수업/오라클 + PL/SQL
서브쿼리란 하나의 테이블에서 검색한 결과를 다른 테이블에 전달하여 새로운 결과를 검색하는 경우에 사용하는 기능이다.
서브퀴리에 기술되는 select 문은 괄호()로 묶어주어야 하며, 서브쿼리가 실행이 된 후,
메인쿼리가 실행 된다.
단일행 서브쿼리
하나의 행만 검색하여 그 결과를 메인쿼리에 보내는 것
// 존스의 deptno를 emp 테이블에서 검색하고 dept테이블에 적용시켜 dname을 검색
select dname
from dept
where deptno=(select deptno
from emp
where ename='JONES');
서브쿼리에서는 그룹함수의 사용이 가능하다.
// emp 테이블에서 평균급여보다 높은 직원의 이름과 급여를 출력하라.
select ename, sal
from emp
where sal > (select avg(sal)
from emp);
다중행 서브쿼리
서브쿼리에서 반환되는 결과가 하나 이상의 행일 때 사용한다.
종류 |
의미 |
IN |
메인 쿼리의 비교 조건(‘=’ 연산자로 비교할 경우)이 서브 쿼리의 결과 중에서 하나라도 일치하면 참입니다. |
ANY, SOME |
메인 쿼리의 비교 조건이 서브 쿼리의 검색 결과와 하나 이상이 일치하면 참입니다. |
ALL |
메인 쿼리의 비교 조건이 서브 쿼리의 검색 결과와 모든 값이 일치하면 참입니다. |
EXIST |
메인 쿼리의 비교 조건이 서브 쿼리의 결과 중에서 만족하는 값이 하나라도 존재하면 참입니다. |
1.SMITH와 동일한 직급을 가진 사원의 이름과 직급을 출력하라.(단일행 서브 쿼리 이용)
select ename, job
from emp
where job=(select job
from emp
where ename='SMITH')
/
2. 부서별로 가장 급여를 많이 받는 사원의 정보를 출력하라.(IN 연산자 이용)
select *
from emp
where sal in(select max(sal)
from emp
group by deptno)
/
3. 직급이 'SALESMAN'인 사원이 받는 급여들의 최대 급여보다 많이 받는 사원들의 이름과 급여를 출력하되
부서번호가 20번인 사원은 제외한다.(ALL 연산자 이용)
select ename, sal
from emp
where sal > all (select max(sal)
from emp
where job='SALESMAN')
/
4. 직급이 'SALESMAN'인 사원이 받는 급여들의 최소 급여보다 많이 받는 사원들의 이름과 급여를 출력하되
부서번호가 20번인 사원은 제외한다.(ANY 연산자 이용)
select ename, sal
from emp
where sal > any (select min(sal)
from emp
where job='SALESMAN'
and deptno not in(20))
================================================================================
'수업 > 오라클 + PL/SQL' 카테고리의 다른 글
Chap3,4 SQLPLUS 명령어 & 연산자 (1) | 2008.08.20 |
---|---|
Chap 2. SQL의 기본 (2) | 2008.08.20 |
Chap 7. 조인 (1) | 2008.08.18 |
Chap 6. 그룹함수 (0) | 2008.08.14 |
Chap 5. SQL 주요 함수 (0) | 2008.08.13 |