SQLD/SQL 기본과 활용

스칼라 서브쿼리(Scalar SubQuery), 인라인 뷰(Inline View), 뷰(View)

DevPing9_ 2020. 8. 28. 19:10

 1. 스칼라 서브쿼리(Scalar SubQuery)

  - 1 row, 1 column 만 리턴하는 서브쿼리

  - 칼럼을 사용할 수 있는 대부분의 곳에서 사용 가능

 

SQL> SELECT PLAYER_NAME,
            HEIGHT
            ROUND((SELECT AVG (X.HEIGHT) 
             FROM PLAYER X 
             WHERE X.TEAM_ID = P.TEAM_ID),2) AS AVG_HEIGHT
     FROM PLAYER P;
 
 # 실행결과
 PLAYER_NAME         HEIGHT         AVG_HEIGHT
 -------------------------------------------------------
 밀리토                  169                   177.89
 스털링                  178                   180.01
 고종수                  188                   175.66
 김정환                  170                   179.99
 노홍철                  180                   181.23
 이승우                  160                   176.45

 

 2. 인라인 뷰(Inline View)

  - FROM 절에서 사용되는 서브쿼리 (테이블 가공하여 새 테이블을 만드는 것과 같음)

  - ORDER BY절로 정렬된 테이블을 만들어 사용 할 수 있다. 

 

SQL> SELECT A.E_NAME,
            A.DEPTNO, A.SAL
     FROM (SELECT *
           FROM EMP
           WHERE SAL = '500') A;
 
 # 실행결과 (SAL이 500인 EMP 데이터만 가지고 있는 테이블)
 E_NAME            DEPTNO                  SAL
 -------------------------------------------------------
 밀리토                  D01                   500
 스털링                  D01                   500
 고종수                  D02                   500
 김정환                  D03                   500
 노홍철                  D05                   500
 이승우                  D07                   500

 

 3. 뷰(View)
  - 테이블은 실제 데이터를 가지고 있지만, 뷰는 뷰 정의만을 가지고 있다.

  - 뷰를 정의하고 사용하게 되면 DMBS는 내부적으로 SQL 문을 인라인 뷰로 재작성한다.

 

# 뷰 정의
SQL> CREATE VIEW V_EMP_DEPT AS
     SELECT A.E_NAME, B.D_NAME
     FROM EMP A, DEPT B
     WHERE A.DEPTNO = B.DEPTNO;

# 뷰 사용
SQL> SELECT E_NAME,
            D_NAME
     FROM V_EMP_DEPT;
 
 # DMBS 내부적으로 재작성 된 모습
 SQL> SELECT E_NAME,
            D_NAME
     FROM (SELECT A.E_NAME, B.D_NAME
           FROM EMP A, DEPT B
           WHERE A.DEPTNO = B.DEPTNO);
 
 # 실행결과 
 E_NAME               D_NAME 
 -------------------------------------------------------
 밀리토                  영업                   
 스털링                  영업                   
 고종수                  유통                   
 김정환                  생산                   
 노홍철                  SW개발                   
 이승우                  클라우드관리       
 
 
 # 뷰 제거
 DROP VIEW V_EMP_DEPT;
728x90