MySQL - SQL Subquery

김혜령·2024년 2월 26일
0

MySQL

목록 보기
13/14
post-thumbnail

Subquery

하나의 SQL문(Mainquery) 안에 포함되어있는 또 다른 SQL(Subquery)문

  • 메인쿼리가 서브쿼리를 포함(종속관계)
  • 서브쿼리는 메인쿼리의 칼럼 사용 가능
  • 메인쿼리는 서브쿼리의 칼럼 사용 불가
  • 주의점
    - Subquery는 괄호로 묶어서 사용
    - 단일 행 혹은 복수 행 비교 연산자와 함께 사용 가능
    - Subquery에서는 ORDER BY 사용X
  • 종류
    - 스칼라 서브쿼리(Scalar Subquery) - SELECT절에 사용
    - 인라인 뷰(Inline View) - FROM절에 사용
    - 중첩 서브쿼리(Nested Subquery) - WHERE절에 사용

Scalar Subquery

SELECT절에서 사용하는 서브쿼리

  • 결과는 하나의 Column이여야 한다

    select column1, (select column2 from table2 where condition)
    from table1
    where condition;

Inline View

FROM절에 사용하는 서브쿼리

  • 메인쿼리에서는 인라인 뷰에서 조회한 Column만 사용가능

    select a.column, b.column
    from table a, (select column1, column2 from table2) b
    where condition;

Nested Subquery

WHERE절에서 사용하는 서브쿼리

  • Single Row
    : 하나의 열을 검색
    - 서브쿼리가 비교연산자와 사용되는 경우, 검색 결과는 한 개의 결과값을 가져야 한다.

    select column_name
    from table_name
    where column_name = (select column_name
    from table_name
    where condition)
    order by column_name;

  • Multiple Row
    : 하나 이상의 열을 검색
    IN(서브쿼리 결과 중에 포함)
    EXIST(결과에 값이 있으면 반환)
    = ANY(결과 중에 최소한 하나라도 만족하면 비교연산자 사용)
    = ALL(결과를 모두 만족하면
    비교연산자 사용)

    select column_name
    from table_name
    where column_name in (select column_name
    from table_name
    where condition)
    order by column_name;

  • Multiple Column
    : 하나 이상의 행을 검색

    select column_name
    from table_name a
    where (a.column1, a.column2, ...) in (select b.column1, b.column2, ... from table_name b
    where a.column_name = b.column_name)
    order by column_name;

0개의 댓글