서브쿼리
서브쿼리라고 불리는 SELECT 구문 안에 포함된(nested) 쿼리
서브쿼리의 종류
리턴 행 수에 따라 : single row, multiple row
실행 방법에 따라 : nested, correlated(조인관련)
비교 컬럼 수에 따라 : single column, multiple column
single-row 서브쿼리
서브 쿼리(안쪽 쿼리)가 오직 한 줄만 리턴한다.
=,>,<,>=,<= 와 같은 single-row 연산자를 사용한다.
multiple-row 서브쿼리
서브 쿼리(안쪽 쿼리)가 오직 여러 줄을 리턴한다.
ANY, ALL, EXISTS와 같은 연산자를 사용한다.
FROM절 안에 서브쿼리
FROM 절 안에 서브쿼리가 올 수 있다.
FROM 절 안에서 사용되는 서브쿼리는 '인라인 뷰'라고 불린다.
인라인 뷰 : SQL에서 수행할 동안에만 존재하는 테이블.
TOP-N 쿼리
FROM
WHERE rownum<4
※ WHERE절의 서브쿼리 안의 변수는 블록 안의 변수와 비슷하기 때문에 사용할 수 없다.
예시) select ename, sal, avg_sal from emp where sal < (select avg(sal) avg_sal from emp)
=> 위의 예시는 오류 난다.
예시) 급여를 많이 받는 순서대로 상위 3명을 출력하시오.
SELECT ename,sal
FROM (SELECT ename, sal FROM emp WHERE sal IS NOT NULL ORDER BY sal DESC)
WHERE rownum<4
※ rownum은 결과열 번호에 대한 pseudo 열이다.
※ rownum은 <, <=, = 부등호만 허용한다.
※ 아래와 같이 수행하면 ORDER BY의 우선순위가 가장 낮으므로 엉뚱한 결과에 대해서 앞의 3개 열만 출력한다.
HAVING절 안에 서브쿼리
inner 서브쿼리의 결과가 HAVING절에 의해 사용된다.
Correlated subquery(상호관련된 서브쿼리)
메인 쿼리(outer query)의 테이블을 서브쿼리가 참조하는 쿼리.
※ 지역변수(서브쿼리)가 전역변수(메인 쿼리)를 참조하는 프로그래밍 원리가 적용된다.
예시)
SELECT deptno, ename, sal
FROM emp m
WHERE sal < (SELECT avg(sal)
FROM emp
WHERE deptno = m.deptno)
'컴퓨터 공부 > Advanced Database' 카테고리의 다른 글
[6월 1일 2교시] SQL Plus 명령 2 + 테이블 생성 1 (0) | 2009.06.01 |
---|---|
[6월 1일 1교시] SQL Plus 명령 1 (0) | 2009.06.01 |
[5월 28일 2교시] 그룹 함수 2 (0) | 2009.05.28 |
[5월 28일 1교시] 그룹 함수 1 (0) | 2009.05.28 |
[5월 27일 3교시] 조인 2 (0) | 2009.05.27 |