Sub Query

부속질의 (Sub Query)

  • 하나의 SQL문 안에 다른 SQL이 중첩된 (nested) 질의를 뜻한다.

  • 다른 테이블에서 가져온 데이터로 현재 테이블에 있는 정보를 찾거나 가공 시 사용.

  • 두 테이블을 연관시킬 때는 조인 혹은 부속질의를 사용한다. 둘 중 어떤 것을 선택할지는 데이터의 형태와 양에 따라 달라진다. 일반적으로, 데이터가 대량일 경우 데이터를 모두 합쳐서 연산하는 조인보다는 필요한 데이터만 찾아서 공급해주는 부속질의의 성능이 더 좋다.

  • 부속질의는 위치와 역할에 따라서 구분이 된다.

    명칭

    위치

    영문 및 동의어

    설명

    스칼라 부속질의

    SELECT 절

    scalar subqueery

    select 절에서 사용되며, 단일값을 반환하기 때문에 스칼라 부속질의라고 한다.

    인라인 뷰

    FROM절

    inline view, table subquery

    from 절에서 결과를 뷰(view) 형태로 반환하기 때문에, 인라인 뷰라고 한다.

    중첩질의

    WHERE절

    nested subquery, predicate subquery

    wherer절에 술어와 같이 사용되며, 결과를 한정시키기 위해 사용된다. (상관 혹은 비상관 형태)

부속질의 다른 분류

  • 동작방식

    • 부속 질의가 주 질의의 값을 참조하는 유무에 따라 분류.

    • 상관 부속질의: 주 질의의 특정 열값을, 부속질의가 상속받아 부속질의의 질의에 사용하는 형태

    • 비상관 부속질의(일반 부속 질의): 독립된 질의를 수행해서 결과값 가져옴

  • 반환하는 결과 형태

    • 부속질의가 단일행을 반환하느냐, 다중 행을 반환하느냐에 따라 분류.

    • 단일행 부속질의: 부속 질의의 결과 하나의 행을 반환하여 주 질의에 전달. (비교 연산자의 수행이나 스칼라 부속질의 등에서 나타난다.)

    • 다중행 부속질의: 부속질의의 결과 여러개의 행을 반환 (IN 연산자를 사용하여 여러 행 처리)

스칼라 부속질의 예

select 문

UPDATE 문

  • 기존 테이블에 새로운 열을 추가하는 경우, 해당 열에 새로 데이터를 업데이트를 일일이 해주는 것은 비효율적이다.

  • 스칼라 부속질의를 사용해서, 일괄 수정 가능.

인라인 뷰 - FROM 부속질의

  • from 절에 사용하는 부속질의

  • 뷰(view): 기존 테이블로부터 일시적으로 만들어진 가상의 테이블

  • SQL의 FROM절에는 테이블이름이 위치하는데, 인라인 뷰를 사용하면 보통 테이블과 같은 형태로 사용이 가능.

  • 부속질의 결과 반환되는 데이터는 다중 행, 다중 열이어도 상관 없다.

  • 단, 가상 테이블이므로 상관 부속질의로는 사용 불가.

Last updated

Was this helpful?