SQL

[SQL] 서브 쿼리

Bay Im 2024. 3. 22. 11:29
  • 서브쿼리 (SubQuery)
    • SELECT 문 안에 SELECT 문을 서브쿼리라고 한다.
    • 복잡한 데이터 추출 및 조작시 사용
    • 서브쿼리는 괄호 안에 기술해야 하고, SELECT, FROM, WHERE, HAVING 절 등에 넣어서 사용 가능
    • 서브쿼리가 먼저 실행 후 메인 쿼리 실행
  • 단일 행 서브쿼리 (Single-Row SubQuery)
    • 서브쿼리의 결과로 단일 행 반환
    • =, <, ≤, ≥, >, <> 등 단일 행 비교연산자 사용하여 연결
    • 예시
      • SELECT 컬럼명
        FROM 테이블명
        WHERE 컬럼명 = (SELECT MAX(컬럼명) FROM 테이블명);
  • 복수 행 서브쿼리 (Multi-Row SubQuery)
    • 서브쿼리의 결과가 여러 행
    • IN, ALL, ANY, SOME, EXISTS 같은 복수행 비교 연산자 사용하여 연결
      • IN
        • 서브쿼리 결과 중 일치하는 것이 하나라도 있으면 참
      • ANY, SOME
        • 하나 이상 일치하면 참
      • ALL
        • 각 결과값이 모두 일치하면 참
      • EXISTS
        • 비교 조건을 만족하는 결과가 존재하면 참
  • 인라인 뷰(Inline View)
    • FROM 절에서 서브쿼리 사용하는 것을 인라인 뷰라고 한다.
    • 뷰에는 반드시 별명 지정, 해당 별명은 테이블명처럼 사용 가능
  • 스칼라 서브쿼리 (Scalar Subquery)
    • SELECT 절 내에서 서브쿼리 사용 시 이때 서브쿼리가 하나의 값을 생성하는 형태를 스칼라 서브쿼리라고 한다.
    • 정확히 한 개의 행에 대해 한개의 값을 반환하는 서브쿼리
      • 0개 반환시 메인 쿼리 결과는 NULL
      • 2개 이상 반환시 오류 발생
    • 쿼리를 실행하여 반환되는 값은 메인 쿼리에서 사용
  • CTE(Common Table Expression)
    • 쿼리로 만든 임시 데이터셋으로 WITH 절에서 정의한다.
    • 쿼래 내에서 여러 번 참조 가능
    • 하나의 쿼리를 논리적인 블록으로 나누기 가능
    • 형식
      • WITH CTE명 AS ( SELECT문 )