[Oracle/기본]6. 서브쿼리(Subquery)
- 서브쿼리를 작성할 수 있는 부분
1. WHERE 절
2. HAVING 절
3. FROM 절
서브쿼리 = 중첩SELECT = 부속 SELECT = 내부SELECT
- 서브쿼리는 괄호로 둘러싸야 한다.
- 서브쿼리는 비교연산자의 오른쪽에 있어야 한다.
- 서브쿼리에 ORDER BY 절을 포함하면 안된다. (SELECT문장에 대해서는 오직 하나의 ORDER BY를 가질 수 있으며,
SELECT문장의 제일 마지막에 있어야 한다.)
● 서브쿼리의 유형
1. 단일 행 서브쿼리 : 내부 SELECT 문장으로부터, 오직 하나의 행만을 리턴하는 질의이다.
단일 행 비교연산자(비교대상이 1개의 결과 리턴)를 사용한다.
=, >, >=, <, <=, <>
Ex. SELECT ename, job
FROM emp
WHERE job = (SELECT job
FROM emp
WHERE empno = 7369)
AND sal > (SELECT sal
FROM emp
WHERE empno = 7876);
2. 다중 행 서브쿼리 : 내부 SELECT 문장으로부터, 하나 이상의 행을 리턴하는 질의이다.
다중 행 비교연산자(비교대상이 1개 이상의 결과 리턴)를 사용한다.
IN, ANY, ALL
Ex. < IN 연산자 사용 >
SELECT ename, sal, deptno
FROM emp
WHERE sal IN (SELECT MIN(sal)
FROM emp
GROUP BY deptno); ☞ 부서에 대해서 최소 급여를 받는 종업원들을 찾는다.
Ex. < ANY 연산자 사용 >
SELECT ename, sal
FROM emp
WHERE sal > ANY (SELECT sal
FROM emp
WHERE deptno = 30) ☞ 30번 부서에서 급여가 가장낮은사람보다
은 급여를 받는 사원의 이름, 급여 출력한다.
★ <ANY : 최대값보다 적음을 의미
>ANY : 최소값보다 많음을 의미
=ANY : IN과 같다.
Ex. < ALL 연산자 사용 >
SELECT ename, sal
FROM emp
WHERE sal > ALL (SELECT sal
FROM emp
WHERE deptno = 30) ☞ 30번 부서에서 급여가 가장높은사람
보다 많은 급여를 받는 사원의 이름, 급여 출력한다.
★ <ALL : 최소값보다 적음을 의미
>ALL : 최대값보다 많음을 의미
3. 다중 열 서브쿼리 : 내부 SELECT 문장으로부터, 하나 이상의 열을 리턴하는 질의 이다.
CLERK 7900
MANAER 7698