SQL

SQL의 Subquery란?? (feat. 스칼라 서브쿼리 ,인라인뷰 서브쿼리)

개발 일기 2021. 7. 12. 22:42

안녕하세요.

 

오늘은 SQL의 서브쿼리(Subquery)에 대해서 공부해보겠습니다.

 

서브쿼리란?

  - SELECT 문(Main)에 포함되어 있는 또 하나의 별도 SELECT문(Subquery)이다.

  - 여러 번의 SELECT문을 수행해야 얻을 수 있는 결과를 하나의 중첩된 SELECT 문으로 얻을 수 있다.

 

   A. 서브쿼리 위치에 따른 종류
      - SELECT 컬럼절  ☞ 스칼라 서브쿼리
      - FROM 절      ☞ 인라인 뷰(서브쿼리)
      - WHERE 절      ☞ 스칼라 서브쿼리[Nested 서브쿼리]
      - GROUP BY 절  ☞ 스칼라 서브쿼리
      - HAVING 절     ☞ 스칼라 서브쿼리
      - ORDER BY 절  ☞ 스칼라 서브쿼리
      
   B. 스칼라 서브쿼리(scalar subquery)
  
      - 하나의 SQL문으로 취급되지만 본질적으로 하나의 함수로 간주하면됨
      - 함수의 가장 큰 특징은 많은 INPUT 이 있더라도 OUTPUT은 하나만 나온다는것입니다.
      - 스칼라 서브쿼리도 일종의 함수이므로 중첩해서 사용가능하나 
         OUTPUT이 두개 이상이거나,OUTPUT의 데이타타입이 맞지않는 경우에는 에러를 발생시킵니다.
      - 대량의 데이타 처리 시 스칼라 쿼리의 남발은 성능저하를 유발 할 수 있으므로
         조인으로 대체하는것이 좋습니다. 

  
   C. 인라인뷰 서브쿼리(INLINE VIEW SUBQUERY)
      

      - SELECT 문의 FROM 절에 Subquery를 사용, 사용 방법은 VIEW와 유사하며 INLINE VIEW라고 칭함

      - INLINE VIEW는 Subquery 형식을 이용한 임시 뷰(SQL문장 내에서만 유효한 Temporary VIEW)

 

1. 스칼라 서브쿼리 예시

 

(WHERE절)

(1) SELECT MIN(SAL) FROM EMP; -> 검색 시 emp 테이블에서 min(sal)의 값은 800

 

 (2) (1)의 SELECT 문장을 활용하여 EMP 테이블의 WHERE 조건에 대입하여 일치하는 값 추출

   -> SELECT * FROM EMP WHERE SAL = (SELECT MIN(SAL) FROM EMP);

 

(COLUMN절)

(1) column에 subquery를 주어서 dept 테이블과 emp 테이블 사이의 PK와 FK가 일치하는 항목들을 노출시킴

  -->> 위 코드는 Join을 이용하면 더 편하게 사용이 가능하니 상황에 따라 판단해서 사용

natural join을 이용하여 subquery와 같은 결과값을 노출

 

2. 인라인뷰 서브쿼리 예시

(FROM절)

(1) emp 테이블의 deptno가 10인  Temporary VIEW(emp10_view) 생성 후 from절 출력

 

 

 

서브쿼리를 활용하여 보다 간단하게 SQL문을 작성하는 법을 공부해보았습니다.

감사합니다.