티스토리 뷰

SUBQUERY ( 서브쿼리 ) 란 ?

  • 하나의 SQL문 내에 또 다른 SQL문이 있는 쿼리문

  • 전체 SQL문을 메인 쿼리라고 하며, 메인 쿼리에 종속된 내부 쿼리를 서브쿼리라고 합니다.

  • 반드시 괄호 ( ) 안에 넣어 표현해야 합니다.

 

 

단일 행 서브쿼리

  • 서브 쿼리의 결과가 1개의 행만 나오는 것

  • 메인 쿼리의 WHERE절에서 단일 행 연산자 (=, <>, >, >=, <, <=)를 이용

/* JONES보다 더 많은 월급을 받는 사람의 이름과 월급 출력 */
SELECT ENAME, SAL
FROM EMP
WHERE SAL > (SELECT SAL FROM EMP WHERE ENAME='JONES');

 

 

다중 행 서브쿼리

  • 서브 쿼리의 결과가 2개 이상인 것

  • 다중 행 연산자 (IN, NOT IN, ANY, ALL, EXISTS)만 사용 가능

IN, NOT IN

/* 부하직원이 없는 사원의 사원번호와 이름 출력 */
SELECT EMPNO, ENAME
FROM EMP
WHERE EMPNO NOT IN (SELECT NVL(MGR,0) FROM EMP);

 

ANY, SOME

: 메인 쿼리의 비교 조건이 서브 쿼리의 검색 결과 중 하나 이상 만족되면 출력

/* SALESMAN들의 급여와 같은 급여를 받는 사원을 조회해보자. */
SELECT EMPNO, ENAME, SAL
FROM EMP
WHERE SAL = ANY(SELECT SAL FROM EMP WHERE JOB='SALESMAN');

 

ALL

: 메인 쿼리의 비교 조건이 서브 쿼리의 검색 결과 모두와 일치하면 출력

/* MANAGER들의 급여보다 높은 급여를 받는 사원을 출력해보자. */
SELECT EMPNO, ENAME, SAL
FROM EMP
WHERE SAL > ALL(SELECT SAL FROM EMP WHERE JOB='MANAGER');

 

EXISTS

: 서브 쿼리의 데이터가 존재하는 지의 여부를 먼저 따지고, 존재하는 값들만 출력

/* 관리자로 등록되어 있는 사원들을 조회해보자. */
SELECT EMPNO, ENAME
FROM EMP E
WHERE EXISTS (SELECT EMPNO FROM EMP WHERE E.EMPNO=MGR);

 

 

 

다중 열 서브 쿼리

  • 서브 쿼리의 결과가 두 개 이상의 컬럼으로 반환되어 메인 쿼리에 전달되는 것

/* SALESMAN들과 같은 부서에서 근무하고 같은 월급을 받는 사원들을 조회해보자. */
SELECT ENAME, SAL, DEPTNO
FROM EMP
WHERE (DEPTNO, SAL) IN (SELECT DEPTNO, SAL FROM EMP WHERE JOB='SALESMAN');

 

 

 

스칼라 서브 쿼리

  • SELECT문에서 쓰이는 단일 행 서브 쿼리

 

상관 쿼리

  • 메인 쿼리의 특정 컬럼을 JOIN 조건으로 사용하는 서브 쿼리

/* 사원들의 이름, 직업, 부서이름을 조회해보자. */
SELECT ENAME, JOB,
		(SELECT DNAME
		FROM DEPT
		WHERE DEPTNO=E.DEPTNO) DNAME
FROM EMP E;

 

/* SALES 부서의 사원 이름과 직업을 조회해보자. */
SELECT ENAME, JOB
FROM EMP E
WHERE DEPTNO = (SELECT DEPTNO
		FROM DEPT
		WHERE DEPTNO=E.DEPTNO AND DNAME='SALES');

 

 

FROM절 서브 쿼리 ( = 인라인 뷰 )

/* 20번 부서의 평균 급여보다 높고, MANAGER인 사원들을 조회해보자. */
SELECT E.EMPNO, E.ENAME, E.JOB, E.SAL, E.DEPTNO
FROM (SELECT EMPNO
	FROM EMP
	WHERE SAL > (SELECT AVG(SAL)
			FROM EMP
			WHERE DEPTNO=20) ) A, EMP E
WHERE A.EMPNO = E.EMPNO
AND E.MGR IS NOT NULL;

 

최근에 올라온 글
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Total
Today
Yesterday