미소의 세상

서브쿼리의 종류 본문

SQL

서브쿼리의 종류

짱미소 2022. 4. 15. 12:14

1. 스칼라쿼리

SELECT 절에서 함수처럼 사용되는 쿼리문입니다.
하나의 레코드만 리턴가능합니다.
일치하는 데이터가 없으면 NULL 값을 리턴합니다.

스칼라 쿼리의 예)

SELECT D.DEPTNO, 
(SELECT MIN(EMPNO) FROM EMP WHERE DEPTNO = D.DEPTNO EMPNO
FROM DEPT D
ORDER BY D.DEPTNO) AS EMPNO -- 스칼라쿼리
FROM DEPT D
ORDER BY D.DEPTNO;
스칼라 쿼리는 일치하지 않더라도 NULL을 리턴하므로
Outer 조인과 같은 형태이며,
이는 스칼라 쿼리와 Outer 조인은 같은 맥락이라고 볼 수 있다는걸 의미합니다.

2. 인라인뷰

FROM 절에서 임시 공간에 테이블을 생성하여 사용되는 뷰와 비슷한 저장 형태를 의미합니다.
FROM 절에 있는 서브쿼리가 인라인 뷰를 생성합니다.
생성할대는 반드시 앨리어스(별칭) 지정 꼭 해줍시다!

인라인뷰 예)

SELECT E.LAST_NAME, E.SALARY, D.AVGSAL
  FROM EMPLOYEES E, (SELECT DEPARTMENT_ID, AVG(SALARY) AVGSAL
                       FROM EMPLOYEES
                       GROUPO BY DEPARTMENT_ID) D
WHERE E.DEPARTMENT_ID = D.DEPARTMENT_ID
  AND E.SALARY < D.AVGSAL;

3. 서브쿼리

WHERE 조건 절에서 비교형태로 사용되는 형태입니다.

서브쿼리 예)

SELECT A.ACCOUNT,

       A.CUSTOMER_NO,

       A.CUSTOMER_NM,

       A.ADD_CASH

       ( SELECT EMP_NM

           FROM EMPLOYEE A

          WHERE D.EMP_NO = A.EMP_NO) AS 담당자_이름 -- 스칼라쿼리

  FROM TB_ACCOUNT A,

       (SELECT CUSTOMER_NO,

               MAX(ADD_CASH) AS 적립금

          FROM TB_POINT

         WHERE ADD_DATE = '20210905') C -- 인라인 뷰

WHERE NOT EXISTS ( SELECT 'X'

                     FROM TB_DEPOSIT B

                    WHERE A.ACCOUNT_NO = B.ACCOUNT_NO

                      AND B.DEAL_DATE LIKE '202109%') -- 서브쿼리

'SQL' 카테고리의 다른 글

프로시저의 장단점  (0) 2022.05.11
Mybatis #, $ 차이  (0) 2022.05.04
Mybatis와 비교한 JPA 장단점  (0) 2022.04.03
오라클 자주 사용하는 힌트 정리 (sql 튜닝)  (0) 2022.03.22
오라클 MYSQL 문법 차이  (0) 2022.03.02
Comments