본문 바로가기
데이터베이스

오라클 SQL / 부속질의

by LWM 2020. 5. 6.
반응형

*부속질의(subquery)란

  • 하나의 SQL문 안에 다른 SQL문이 중첩된(nested) 질의를 말한다.
  • 다른 테이블에서 가져온 데이터로 현재 테이블에 있는 정보를 찾거나 가공할 때 사용한다.
  • 보통 데이터가 대량일 때 데이터를 모두 합쳐서 연산하는 조인보다 필요한 데이터만 찾아서 공급해주는 부속질의가 성능이 더 좋다.
  • 주질의(main query, 외부질의)와 부속질의(sub query, 내부질의)로 구성된다.

예시

 

 

*부속질의 종류

  • 스칼라 부속질의 - SELECT 부속질의
  • 인라인 뷰 -FROM 부속질의
  • 중첩질의 - WHERE 부속질의

 

 

*스칼라 부속질의(SELECT 부속질의)

  • SELECT절에서 사용되는 부속질의로, 부속질의의 결과 값을 단일 행, 단일 열의 스칼라 값으로 반환한다.
  • 스칼라 부속질의는 원칙적으로 스칼라 값이 들어갈 수 있는 모든 곳에 사용 가능하며, 일반적으로 SELECT문과 UPDATE SET절에 사용된다.
  • 주질의와 부속질의와의 관계는 상관/비상관 모두 가능하다.

예시1
예시2

 

 

*인라인 뷰(FROM 부속질의)

  • FROM절에서 사용되는 부속질의이다.
  • 테이블 이름 대신 인라인 뷰 부속질의를 사용하면 보통의 테이블과 같은 형태로 사용 가능하다.
  • 부속질의 결과 반환되는 데이터는 다중 행, 다중 열이어도 상관없다. 다만 가상의 테이블인 뷰 형태로 제공되어 상관 부속질의로 사용될 수는 없다.

예시

 

 

*중첩질의(WHERE 부속질의)

  • 중첩질의는 WHERE절에서 사용되는 부속질의이다.
  • WHERE절은 보통 데이터를 선택하는 조건 혹은 술어와 같이 사용된다.
  • 중첩질의를 술어 부속질의라고도한다.

 

- 중첩질의 연산자의 종류

  • IN, NOT IN

    IN연산자는 주질의 속성 값이 부속질의에서 제공한 결과 집합에 있는지 확인하는 역할을 한다.
    IN연산자는 부속질의의 결과 다중 행을 가질 수 있다. 주질의는 WHERE절에 사용되는 속성 값을 부속질의의
    결과 집합과 비교해 하나라도 있으면 참이 된다. NOT IN은 이와 반대로 값이 존재하지 않으면 참이된다.
  • ALL, SOME(ANY)

    ALL은 모두, SOME(ANY)은 어떠한(최소한 하나라도)이라는 의미를 가진다.
  • EXISTS, NOT EXISTS

    데이터의 존재 유무를 확인하는 연산자이며 주질의에서 부속질의로 제공된 속성의 값을 가지고
    부속질의에 조건을 만족하여 값이 존재하면 참이되고, 주질의는 해당 행의 데이터를 출력한다.
반응형

'데이터베이스' 카테고리의 다른 글

오라클 SQL / 뷰(VIEW)  (0) 2020.05.06
오라클 SQL / ROWNUM  (0) 2020.05.06
오라클 SQL / 인덱스(INDEX)  (0) 2020.05.06
오라클 SQL / NULL  (0) 2020.05.06