Oracle SQL 강좌
Scalar Subquery 8 4 67,197

by 김정식 Scalar Subquery Subquery 서브쿼리 스칼라 서브쿼리 [2002.08.30]


Scalar Subquery란?

SELECT 절에서 사용하는 Subquery 이다.

Scalar Subquery의 특징

한 개의 로우만 반환 한다.

메인 쿼리에서 추출되는 데이터 건 수 만큼 수행되기 때문에 조인으로 수행 될 때보다 수행회수가 적을 수 있다.

일치하는 값이 없는 경우 NULL을 반환 한다.

코드성 테이블에서 코드값을 조회 할 때, 불필요한 조인을 하지 않기 위해 많이 사용한다.

Scalar Subquery 예제

아래는 일반적인 Scalar Subquery 예이다.

 
-- 직업이 ‘MANAGER’인 사원의 사원명, 부서명을 조회하는 예제
SELECT ename,
       (SELECT dname FROM dept d WHERE d.deptno = e.deptno) deptno
FROM emp e
WHERE job ='MANAGER';

ENAME      DEPTNO
---------- --------------
JONES      RESEARCH
BLAKE      SALES
CLARK      ACCOUNTING

NULL값을 반환하는 Outer Join형태의 Scalar Subquery 예

 -- Scalar Subquery는 일치하는 값이 없으면 NULL을 반환하므로 Outer Join과 같은 형태이다.
-- 아래는 부서별 최대 급여정보 조회 예이다.
-- 부서 40에 해당하는 직원이 없기 때문에 최대 급여가 조회 되지 않는다.
SELECT d.deptno, d.dname,
       (SELECT MAX(sal) 
          FROM emp
         WHERE deptno = d.deptno) sal
  FROM dept d;



-- 결과가 동일한 Outer Join 예이다.
SELECT d.deptno, d.dname, MAX(e.sal)
  FROM dept d, emp e
 WHERE d.deptno = e.deptno(+)
 GROUP BY d.deptno, d.dname
 ORDER bY d.deptno;

DEPTNO DNAME          SAL
------ -----------  -----
    10 ACCOUNTING    5000
    20 RESEARCH      3000
    30 SALES         2850
    40 OPERATIONS

- 강좌 URL : http://www.gurubee.net/lecture/1506

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

by 정존 [2013.07.12 13:20:30]
감사합니다.

by 박군 [2013.12.31 17:23:46]

전 실행이되면 무조건 서브쿼리부터 실행되는줄 알았는데

SELECT ename,
(SELECT dname FROM dept d WHERE d.deptno = e.deptno) deptno
FROM emp e
WHERE job ='MANAGER';

서브쿼리안에 E.DEPTNO가 사용되는걸 보면 서브쿼리가 먼저 실행되는게 아닌가 보군요,
실행순서에 대해 누가 다시 좀 정리해주시면 감사하겠습니다.

by 박군 [2013.12.31 17:34:41]

혹시 일반컬럼처럼 서브쿼리가 동작하는 것으로 이해하면 되는게 맞나요?
1.from
2.where
3.컬럼 , 서브쿼리실행


by 밝은악마 [2014.12.04 11:55:04]

SELECT 절에서 사용하는 Subquery 이다 > subquery로 사용하는 select절이 맞지 않을까요? ㅎ

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입