부속질의 (서브쿼리)

  • SQL 문 안에 다른 SQL문이 중첩된 질의
  • 다른 테이블에서 가져온 데이터로 현재 테이블에 있는 정보를 찾거나 가공할 때 사용
  • 보통 데이터가 대량일 때 데이터를 모두 합쳐서 연산하는 조인보다, 필요한 데이터만 찾아서 공급해주는 부속질의가 성능이 더 좋음
  • 주질의(main query)와 부속질의로 구성됨
명칭 위치  설명
스칼라 부속질의 SELECT 절 SELECT 절에서 사용되며 단일 값을 반환하기 때문에 스칼라 부속질의라고 함
인라인 뷰 FROM 절 FEOM 절에서 결과를 뷰 형태로 반환하기 때문에 인라인 뷰라고 함
중첩질의 WHERE 절 WHERE 절에서 술어와 같이 사용되며 결과를 한정시키기 위해 사용됨.
상관 홋은 비상관 형태(주질의 값 참조여부)

스칼라 부속질의(scalar subquery)

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

인라인 뷰(inline view)

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

중첩질의(nested subquery)

; WHERE 절에서 사용되는 부속질의

WHERE 절은 보통 데이터를 선택하는 조건 혹은 술어와 같이 사용됨

> 중첩질의를 술어 부속질의라고도 함

술어 연산자 반환 행 반환 열 상관
비교 =, > , < , >=, <=, < > 단일 단일  가능
집합 IN, NOT IN  다중  단일 가능
한정 ALL, SOME(ANY) 다중 단일  가능
존재 EXISTS, NOT EXISTS 다중 다중 필수

비교 연산자

  • 부속질의가 반드시 단일 행, 단일 열을 반환해야 하며, 아닐 경우 질의를 처리할 수 없음

IN, NOT IN

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

ALL, SOME(ANY)

  • ALL은 모두, SOME(ANY)는 어떠한(최소한 하나라도)이라는 의미
  • 구문 구조
    • scalar_expression {비교연산자 ( =, <>, !=, >, >=, !>, <, <=, !< ) }
      • { ALL | SOME | ANY } (부속질의)

EXISTS, NOT EXISTS

  • 데이터의 존재 유무를 확인하는 연산자
  • 주질의에서 부속질의로 제공된 속성의 값을 가지고 부속질의에 조건을 만족하여 값이 존재하면 참이 되고, 주질의는 해당 행의 데이터를 출력함
  • NOT EXIST의 경우 이와 반대로 동작함
  • 구문 구조
    • WHERE [NOT] EXISTS (부속질의)

'🗂️ Study > 📊 MySQL' 카테고리의 다른 글

정규화(Normalization)  (0) 2024.05.29
JOIN  (0) 2024.05.21
CREATE  (0) 2024.05.21
SQL  (0) 2024.05.21
Database  (0) 2024.05.21