메인 테이블 선택

도로롱·2025년 8월 9일

⭐목적:

해당 섹션은 프로그래머스/리트코드/해커랭커 등 외부 사이트에서 SQL 오답 문제에 대한 오답을 적고, 어느 부분에서 막혔고, 무엇을 배웠는지에 대해 간략하게 기록 하기 위함임.


❤️오답노트 활용 팁

  1. 원인 분석에 집중하세요: 정답 코드를 이해하는 것보다 내가 왜 틀렸는지를 한두 줄이라도 직접 글로 써보는 과정이 가장 중요합니다. '실수했다'에서 그치지 않고 '왜 실수했는지'를 파고들어야 같은 실수를 반복하지 않습니다.

  2. 태그를 적극적으로 활용하세요: #JOIN, #서브쿼리, #날짜함수 와 같이 태그를 꾸준히 달아두면, 나중에 특정 개념이 약하다고 느낄 때 해당 태그가 달린 문제들만 모아서 복습할 수 있습니다.

  3. 주기적으로 다시 풀어보세요: 일주일 뒤, 한 달 뒤에 오답 노트를 보면서 코드를 보지 않고 다시 한번 풀어보세요. 완벽하게 풀 수 있다면 그 개념은 이제 당신의 것이 된 겁니다.

⭐ 오답 노트 TEMPLATE

📆 날짜: 2025-08-07

📌 문제 정보

📝 문제 요약

  • [예: '업그레이드 가능한 아이템 정보 추출']
  • 조건 값: RARE 아이템 대상, 아이템 ID 기준 내림차순

❌ 나의 오답 코드 (비효율 코드)

-- 여기에 내가 작성했던 틀린 코드를 그대로 붙여넣으세요.
SELECT
    TREE2.ITEM_ID,
    INFO2.ITEM_NAME,
    INFO2.RARITY
FROM
    ITEM_INFO INFO
    JOIN ITEM_TREE TREE ON INFO.ITEM_ID = TREE.ITEM_ID
    JOIN ITEM_TREE TREE2 ON TREE.ITEM_ID = TREE2.PARENT_ITEM_ID
    JOIN ITEM_INFO INFO2 ON INFO2.ITEM_ID = TREE2.ITEM_ID
WHERE
    INFO.RARITY ='RARE'
ORDER BY
    1 DESC;

🤔 오답 원인 분석
오류 메시지 또는 실패 원인: [예: '정답이긴 하지만 조인을 3번을 씀.']

근본적인 실수: [예: 'TREE 테이블을 메인 테이블로 가져가야 하는데, INFO 테이블을 메인으로 가져가다 보니 여러번 조인을 하게됨']

헷갈렸던 개념: [예: '없음']

✅ 정답 코드 및 핵심 로직

SELECT
    T.ITEM_ID,
    I.ITEM_NAME,
    I.RARITY
FROM
    ITEM_TREE T
    JOIN ITEM_INFO I ON T.ITEM_ID = I.ITEM_ID
WHERE
    T.PARENT_ITEM_ID IN (
        SELECT ITEM_ID
        FROM ITEM_INFO
        WHERE RARITY = 'RARE'
    )
ORDER BY
    T.ITEM_ID DESC;
  • 핵심 로직: TREE 테이블을 메인으로 하여 INFO 테이블과 ID로 조인하고, RARE 인 상품들은 WHERE 절 서브 쿼리로 만든다.

📚 핵심 개념 및 배운 점

  • 주요 함수/문법:

  • 배운 점:
    ㄴ 문제에서 요청하는 부분은 "다음 업그레이드 아이템"에 대한 정보였다. 다음 업그레이드 된 정보는 INFO 테이블이 아니라, TREE 테이블에서 확인이 가능하며, 이는 TREE 테이블로 메인 테이블을 잡고 시작했어야했다.
    ㄴ 실무나 쿼리 테스트에서 어떤 테이블을 메인으로 잡고 시작할지 결정 하는 것은 쿼리의 효율성과 가독성에 크리티컬한 영향을 끼친다.


profile
질문 없는 성장은 없다. 3년차 데이터 분석가

0개의 댓글