본문 바로가기
내가 공부하려고 올리는/DB

오라클 - 서브쿼리 알아보기

by 결딴력 2021. 11. 17.
반응형

오라클에서 서브쿼리란 쉽게 말해,

하나의 쿼리 문장 안에 또 다른 쿼리 문장이 들어있는 것을 말합니다.

 

서브쿼리 사용 시 주의사항

  • 서브 쿼리를 괄호로 감싸서 사용해야 한다.
  • 서브 쿼리는 단일 행(Single Row) 또는 복수 행(Multiple Row) 비교 연산자와 함께 사용 가능하다.
  • 단일 행 비교 연산자는 서브 쿼리 결과가 반드시 1건 이하여야 한다.
  • 복수 행 비교 연산자는 서브쿼리의 결과 개수와 상관없다.
  • 서브 쿼리에는 'ORDER BY'절을 사용하지 못한다.(ORDER BY 절은 메인쿼리에서만 사용 가능)

 

서브쿼리 사용 가능 위치

  • SELECT 뒤
  • FROM 뒤
  • WHERE 뒤
  • HAVING 뒤
  • ORDER BY 뒤
  • INSERT VALUES 뒤
  • UPDATE SET 뒤

거의 다 사용 가능하다..

 

 

서브쿼리 종류

  1. 비연관/연관 서브 쿼리
    • 비연관 서브 쿼리(Un-Correlated)
      : 서브 쿼리가 메인 쿼리 컬럼을 가지고 있지 않은 형태
        메인 쿼리에 값을 제공하기 위한 목적으로 주로 사용
    • 연관 서브 쿼리(Correlated)
      : 서브 쿼리가 메인 쿼리 컬럼을 가지고 있는 형태
        일반적으로 메인 쿼리가 먼저 수행되고 읽힌 데이터와 서브 쿼리의 데이터가
        조건이 맞는지 확인하고자 할 때 주로 사용
  2. Single Row/Multi Row/Multi Column 서브쿼리
    • Single Row(단일 행) 서브쿼리
      : 서브쿼리의 실행 결과가 항상 1건 이하
        단일 행 비교 연산자와 함께 쓰인다.
        cf) 단일 행 비교 연산자 = {<, <=, >, >=, <>}
    • Multi Row(다중 행) 서브쿼리
      : 서브쿼리의 실행 결과가 여러 건인 서브쿼리
        다중 행 비교 연산자와 함께 쓰인다
        cf) 다중 행 비교 연산자 = {IN, ALL, ANY, SOME, EXISTS}
    • Multi Column(다중 컬럼) 서브쿼리
      : 서브쿼리의 실행 결과로 여러 컬럼이 나오는 서브쿼리
        메인쿼리의 조건절에서 여러 컬럼을 동시에 비교 가능
        서브쿼리와 메인쿼리에서 비교하고자 하는 컬럼 개수와 컬럼의 위치가 동일해야 한다.

 

 

단일 행 서브 쿼리

  • 가장 일반적이며 단순한 형태
  • 서브쿼리의 결과가 단일 행인 경우
  • 예제 : TEMP 테이블에서 연봉이 가장 많은 직원의 ROW를 찾아,
            동일한 연봉을 받는 직원의 사번과 성명을 읽어오자

실행 결과

 

 

다중 행 서브 쿼리

  • IN, ANY, ALL, EXISTS 등의 연산 시에 사용 가능한 서브 쿼리
  • 단일 행 서브 쿼리와 달리 서브쿼리 결과가 여러 건이 나올 수 있음
  • 예제 : TEMP 테이블과 TDEPT 테이블을 활용해 직원 중 인천에 근무하는 직원의 사번과 성명을 읽어오자

실행 결과

 

다중 컬럼 서브 쿼리

  • 다중 컬럼 서브 쿼리는 서브 쿼리 결과로 나오는 행이 여러 컬럼인 경우
  • 보통 PRIMARY KEY 컬럼이 두 개 이상인 경우에 KEY 값을 묶어서 비교하기 위해 자주 사용
  • 예제 : TDEPT의 부서 코드와 BOSS_ID 컬럼을 사용해 두 개의 컬럼이
            TEMP의 부서코드와 사번에 일치하는 사람의 사번과 성명을 읽어오자

실행 결과

 

 

연관 서브 쿼리(Correlated)

  • 서브 쿼리 내에 메인쿼리 칼럼이 사용되는 서브쿼리
  • 예제 : TEMP 테이블을 활용하여 직원 중 자신의 연봉이 자신이 속한
            직급의 평균 연봉보다 높은 직원의 사번과 성명을 읽어오자

실행 결과

 

그밖에 위치에서 사용되는 서브 쿼리

  • SELECT 절에 서브 쿼리 사용
    • SELECT 절에 사용되는 서브 쿼리는 스칼라 서브쿼리(Scalar Subquery)라 한다.
    • 스칼라 서브쿼리는 한 행, 한 컬럼만을 반환한다.
    • 예제 : EMP 테이블에서 부서별로 평균 급여보다 높은 급여를 받는 사원의 이름과 연봉,
              그리고 부서별 평균 연봉을 스칼라 서브쿼리를 사용해 알아보자

실행 결과

  • FROM 절에 서브쿼리 사용
    • FROM 절에서 사용되는 서브쿼리를 인라인 뷰(Inline View)라고 한다.
    • 인라인 뷰는 테이블 명이 올 수 있는 곳에서 사용할 수 있다.
    • 예제 : EMP 테이블에서 부서별로 평균 급여보다 높은 급여를 받는 사원의 이름과 연봉,
              그리고 부서별 평균연봉을 인라인뷰를 사용해 알아보자

실행 결과

  • 이외에도 HAVING 절, UPADTE문의 SET 절, INSERT문의 VALUES 절 등에서 사용 가능하다.

 

 

 

반응형

댓글