3초기억력

오라클 - 스칼라 서브쿼리란? 본문

쿼리_MSSQL

오라클 - 스칼라 서브쿼리란?

잠수콩 2011. 4. 8. 13:41



1. 스칼라 서브쿼리란?

  • 스칼라 서브쿼리란 Select-List에서 서브쿼리가 사용될 때 이를 스칼라 서브쿼리라 칭함.
  • 스칼라 서브쿼리의 특징은 다음과 같음.
    • 하나의 레코드만 리턴이 가능하며, 두개 이상의 레코드는 리턴할 수 없다.
    • 일치하는 데이터가 없더라도 NULL값을 리턴할 수 있다.
      이는 원래 그룹함수의 특징중에 하나인데 스칼라 서브쿼리 또한 이 특징을 가지고 있다.
      -- 1. 그룹함수 사용 안할 때는 리턴하는 값이 없음
      SELECT 1
      FROM   DEPT
      WHERE  1 = 2
      ;
      
      no rows selected
      
      -- 2. 그룹함수를 사용하면 값을 리턴함
      SELECT MIN(DEPTNO)
      FROM   DEPT
      WHERE  1 = 2
      ;
      
      MIN(DEPTNO)     
      -----------     
                      
      
      1 row selected.
      
      -- 3. 스칼라 서브쿼리 테스트(일치하는 값이 없을 경우 NULL 리턴함)
      -- EMP:DEPT = M:1 관계에서 M 대상을 올리다보니 GROUP BY 을 추가함
      SELECT D.DEPTNO,
             (SELECT MIN(EMPNO) 
              FROM   EMP
              WHERE  DEPTNO = D.DEPTNO) EMPNO
      FROM   DEPT D
      ORDER BY D.DEPTNO
      ;
      
          DEPTNO      EMPNO
      ---------- ----------
              10          1
              20         10
              30        100
              40       1000
              50      10000
              60     100000
              70           
              80           
              90           
      
      9 rows selected.

2. 스칼라 서브쿼리와 Outer 조인 관계

  • 위와 같이 스칼라 서브쿼리는 일치하지 않더라도 NULL를 리턴하므로 Outer 조인과 같은 형태이며,
    이는 스칼라 서브쿼리와 Outer 조인은 서로 변형이 가능하다는 것을 알 수 있다.
    SELECT D.DEPTNO,
           E.EMPNO
    FROM   DEPT D,
           (SELECT DEPTNO, 
                   MIN(EMPNO) EMPNO
            FROM   EMP
            GROUP BY DEPTNO) E
    WHERE  D.DEPTNO = E.DEPTNO(+)
    ORDER BY D.DEPTNO
    ;     
    
        DEPTNO      EMPNO   
    ---------- ----------   
            10          1   
            20         10   
            30        100   
            40       1000   
            50      10000   
            60     100000   
            70              
            80              
            90              
    
    9 rows selected.


 출처 : http://www.gurubee.net/pages/viewpage.action?pageId=4948083 


상세한 설명은 위 링크로~
 
Comments