inblog logo
|
muaga's Hub
    Programmers-MySQL

    [프로그래머스] Lv.3 물고기 종류 별 대어 찾기 (JOIN, IN)

    [프로그래머스] Lv.3 물고기 종류 별 대어 찾기 (JOIN, IN)
    muaga's avatar
    muaga
    May 27, 2024
    [프로그래머스] Lv.3 물고기 종류 별 대어 찾기 (JOIN, IN)
    Contents
    답풀이❔ JOIN + IN을 사용할 경우, 내부의 조건에 따른 결과 차이
     
    notion image
    notion image
    notion image
    notion image
     

    답


    ◽ JOIN, IN

    SELECT I.ID, N.FISH_NAME, I.LENGTH FROM FISH_INFO AS I JOIN FISH_NAME_INFO AS N ON I.FISH_TYPE = N.FISH_TYPE WHERE I.LENGTH IN ( SELECT MAX(LENGTH) FROM FISH_INFO ➡️ WHERE FISH_TYPE = I.FISH_TYPE GROUP BY FISH_TYPE ) ORDER BY I.ID;
     

    풀이


    ❔ JOIN + IN을 사용할 경우, 내부의 조건에 따른 결과 차이

    ◽ 첫 번째 쿼리
    SELECT I.ID, N.FISH_NAME, I.LENGTH FROM FISH_NAME_INFO AS N JOIN FISH_INFO AS I ON N.FISH_TYPE = I.FISH_TYPE WHERE I.LENGTH IN ( SELECT MAX(LENGTH) FROM FISH_INFO GROUP BY FISH_TYPE ) ORDER BY I.ID;
     
    ◽ 두 번째 쿼리
    SELECT I.ID, N.FISH_NAME, I.LENGTH FROM FISH_INFO AS I JOIN FISH_NAME_INFO AS N ON I.FISH_TYPE = N.FISH_TYPE WHERE I.LENGTH IN ( SELECT MAX(LENGTH) FROM FISH_INFO ⭐ WHERE FISH_TYPE = I.FISH_TYPE GROUP BY FISH_TYPE ) ORDER BY I.ID;
     
    ◽ 결과 차이
    두 쿼리의 결과가 다른 이유는 서브쿼리의 조건과 상관 여부 때문이다.
    • 첫 번째 쿼리 :
    SELECT MAX(LENGTH) FROM FISH_INFO GROUP BY FISH_TYPE
    서브쿼리는 독립적으로 실행되어 ( ) 속에 맞는 결과를 반환한다. 각 ‘FISH_TYPE’의 최대 길이를 가진 행을 반환하여, 외부 쿼리(JOIN)는 이 행을 ‘I.LENGTH’ 와 비교하여 조건에 맞는 행을 선택한다.
    ➡️ 모든 FISH_TYPE의 최대 길이를 단일 집합으로 비교해서 선택하는 방식이다.
     
    • 두 번째 쿼리 :
    SELECT MAX(LENGTH) FROM FISH_INFO ⭐ WHERE FISH_TYPE = I.FISH_TYPE GROUP BY FISH_TYPE
    서브 쿼리가 외부 쿼리의 ‘I.FISH_TYPE’을 참조한다. ’I.FISH_TYPE’ 값에 대해 실행되어 해당 'FISH_TYPE'의 최대 길이를 가진 행을 반환한다. 이렇게 하면 각 ‘I.FISH_TYPE’ 별로 최대 길이를 가진 행을 확실히 선택한다.
    ➡️ 각 FISH_TYPE에 대해 개별적으로 최대 길이를 비교하여 선택하는 방식이다.
     
    두 쿼리의 주요 차이는 서브쿼리가 외부 쿼리와 상관 관계가 있는 지 여부에 있다. 두 번째 쿼리가 의도한 대로 각 FISH_TYPE의 최대 길이를 가진 행을 정확히 선택하는 방식으로 보다 구체적이고 정확한 결과를 제공한다.
     
    Share article
    Contents
    답풀이❔ JOIN + IN을 사용할 경우, 내부의 조건에 따른 결과 차이

    muaga's Hub

    RSS·Powered by Inblog