오라클에서 자주 사용되는 서브쿼리(SubQuery)에 대해 배워보자.
여기서 말하는 서브쿼리는 쿼리 안에 쿼리가 들어가 있는 형태이다.
스칼라 서브쿼리, 인라인 뷰, 중첩 서브쿼리 3가지가 있다.
스칼라 서브쿼리(Scalar SubQuery)
SELECT
e.ENAME 이름,
e.SAL 급여,
(
SELECT DNAME FROM DEPT d
WHERE d.DEPTNO = e.DEPTNO
) 부서명
FROM EMP e
WHERE SAL >= 2500;
EMP 테이블에서 SAL이 2500이상인 직원의 부서명을 출력하는 예제이다.
스칼라 서브쿼리는 SELECT 절에서 사용하므로 주의할 게 있다.
위의 경우 다중 행이 조회되는 경우 에러가 발생한다.
다중 행을 처리하고 싶다면 IN, NOT IN과 같은 연산자를 사용하면 된다.
인라인 뷰(Inline View)
SELECT d.DNAME 부서명, 급여평균, 인원수
FROM
(
SELECT DEPTNO, ROUND(AVG(SAL)) 급여평균, COUNT(*) 인원수
FROM EMP
GROUP BY DEPTNO
) e, DEPT d
WHERE e.DEPTNO = d.DEPTNO;
부서별 급여평균, 인원수를 출력하는 예제이다.
FROM절에 사용하는 서브쿼리는 인라인 뷰라 한다.
해당 쿼리문에서만 사용하는 임시 뷰이다.
인덱스가 없기때문에 데이터가 많을 경우 실행시간이 오래 걸릴 수 있으니 주의하자.
중첩 서브쿼리(Nested SubQuery)
SELECT ENAME, SAL FROM EMP e
WHERE SAL < (SELECT AVG(SAL) FROM EMP);
평균급여보다 낮은 직원 이름과 급여를 출력하는 예제이다.
WHERE절에서 집계함수인 AVG를 사용할 수 없으므로 중첩 서브쿼리를 사용해 평균급여를 구할 수 있다.
'DB > 오라클(Oracle)' 카테고리의 다른 글
[Oracle] 오라클 테이블 구조 및 데이터 복사하기 (2) | 2023.12.06 |
---|---|
[Oracle] 오라클 JOIN 사용법 (2) | 2023.12.04 |
[Oracle] 오라클 GROUP BY, HAVING 사용법 (2) | 2023.12.02 |
[Oracle] 오라클 CASE WHEN 사용법 (0) | 2023.12.01 |
[Oracle] 오라클 정렬 ORDER BY 사용법 (0) | 2023.11.30 |