[데이터베이스] 단일 서브쿼리 / 다중 서브쿼리의 사용 예

    ✏️outer join 예제

    FROM절과 WHERE 절의 순서도 효율성에 큰 영향을 미친다. 

     

     

    냅다 JOIN 하지 말고 우선 DISTINCT로 어디에 OUTER 걸어야 할지 생각해보기

    근데! 냅다 DISTINCT 하지 말고 우선 SELECT COUNT(*) FROM TABLE 해서 데이터가 총 몇 건인지 보고 나서 해보기.

     

    SUB QUERY 서브쿼리

    SELECT 문 안에 다시 SELECT 문이 기술된 형태의 쿼리

    단일 SELECT 문으로 조건식을 만들기에는 조건이 부족할 때 또는 완전히 다른 테이블에서 데이터 값을 조회해 메인 쿼리의 조건으로 사용할 때에 유용

    하나의 SQL문에 포함되어 있는 또 다른 SQL 문을 의미함

     

    사용 방법: 

     서브쿼리를 괄호로 감싸서 사용
     서브쿼리는 단일 행 또는 복수 행 비교연산자와 함께 사용 가능
    서브쿼리에서는 ORDER BY를사용하지 못함
      사용 가능 위치
    : SELECT, FROM, WHERE, HAVING, ORDERBY, INSERT 문에 VALUES    

     

    🚩단일 행 서브쿼리

     서브 쿼리가 단일 행 비교 연산자(=,<,>,<=.>=.<>)와 함께 사용할 때에는 서브쿼리의 결과 건수가 반드시 1건 이하여야 한다. (그 이상이면 오류 발생) 

     

    ✏️서브쿼리 예제

    주의 💥 밖과 안에서 둘 다 SALMONTH를 잡아줘야 한다. 왜냐면 최소(MIN)기준 금액도 11월 기준이고, 기준 금액으로찾을 경우들도 모두 11월이 기준이기 때문이다.

     

    ✏️예제 2

    서브쿼리 안에서 조인(JOIN)이 필요한 경우

     

    🚩다중 서브쿼리

    서브 쿼리의 결과가 2건 이상 반환될 수 있는 경우, 다중 행 비교 연산자 (IN ALL ANY EXIST)와 함께 사용

    IN: 서브쿼리의 결과 중에서 하나라도 일치하면 참

    ALL: 서브쿼리의 검색결과와 모두 일치해야 참

    ANY: 서브쿼리의 검색결과와 하나 이상 일치하면 참

    EXIST: 서브쿼리의 결과 중 만족하는 값이 하나라도 존재하면 참 

    같은 결과를 뽑는 두 가지 방법

     

    다중 서브쿼리문에서 상사로 제한하지 않으면 데이터가 많을 경우 속도에 큰 문제가 야기될 수 있으므로... 서브쿼리문 안에서 한 번 제한해주고, 그걸 또 밖에서 한번 더 걸러줘야 (물론 바깥에서 다시 걸러지긴 함)

    댓글