[ORACLE] 서브쿼리 Subquery _ 오라클
서브쿼리 정의 |
쿼리안에 쿼리가 들어가 있는 쿼리문. 즉, 서브쿼리란 쿼리안에 또 다른 쿼리가 들어있는 쿼리를 말한다.
서브쿼리 종류 |
인라인 뷰, 스칼라 서브쿼리, 기타
서브쿼리 예제 |
--1. 기본형식 SELECT EMPNO AS 사번 FROM EMP WHERE DEPTNO IN ( SELECT DEPTNO FROM DEPT WHERE DNAME = 'SALES' );
하나의 예시이다. SELECT절에 작성이 되면 스칼라 서브쿼리라 부르고, FROM절에 작성되면 인라인 뷰 서브쿼리라 부른다. 위와 같이 WHERE절에 작성이 될 수도 있다. 문제를 직접 풀면서 이해하자.
서브쿼리 문제 |
부서별로 평균 급여보다 높은 급여를 받는 사원은?
--1) 부서별 평균 급여구하기 SELECT AVG(SAL) FROM EMP B GROUP BY DEPTNO;
평균급여
문제를 보면 두가지 조건이 걸린 것을 확인 할 수 있다. 먼저, 부서별로 평균 급여를 구해야한다. 그리고 그 평균 급여보다 급여가 높은 사람을 구하라는 문제이다. 평균 급여보다 받는 급여가 더 큰 사원을 구해야한다. 이때 이 쿼리를 서브쿼리로 사용하면 문제는 간단히 풀린다.
--2) 문제_부서별로 평균 급여보다 높은 급여를 받는 사원은? SELECT A.ENAME, A.SAL FROM EMP A WHERE A.SAL > ( SELECT AVG(SAL) FROM EMP B WHERE A.DEPTNO = B.DEPTNO GROUP BY DEPTNO );
서브쿼리결과
여기서 우리가 유의깊게 봐야할 것은 서브쿼리에 작성된 WHERE절이다! 마치 조인의 ON 조건처럼 작성이 되어있는 것을 확인 할 수 있다. 만약 조건이 없다면 서브쿼리의 결과가 다중행으로 나오는데 어떤 것을 기준으로 비교해줘야 하는지 옵티마이저는 알 수 없기 때문이다. 따라서, 우리는 서브쿼리의 WHERE절에 조건을 설정해주어서 정확한 결과를 도출해낼 수 있다.
중요!
서브쿼리에서는 메인쿼리의 컬럼에 접근할 수 있지만, 메인쿼리에서 서브쿼리로는 접근이 불가하다! 기억하자!
'프로그래밍 > 오라클' 카테고리의 다른 글
[ORACLE] 서브쿼리 Subquery 활용_ 오라클 서브쿼리 (0) | 2017.04.04 |
---|---|
[ORACLE] GROUP BY, HAVING _ 오라클 조인 (0) | 2017.03.31 |
[ORACLE] JOIN _ ON 과 WHERE _ 오라클 조인 (4) | 2017.03.30 |
[ORACLE] JOIN _ INNER JOIN _ 오라클 조인 (0) | 2017.03.29 |
[ORACLE] NULL 함수 _ 오라클 (0) | 2017.03.28 |