IN 조건

도로롱·2025년 8월 30일

⭐목적:

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


❤️오답노트 활용 팁

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

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

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

⭐ 오답 노트 TEMPLATE

📆 날짜: 2025-08-31

📌 문제 정보

  • 출처 및 번호: [예: 프로그래머스/업그레이드 할 수 없는 아이템 구하기
    ]
  • 문제 링크: [https://school.programmers.co.kr/learn/courses/30/lessons/273712]

📝 문제 요약

  • [예: '아이템 중 업그레이드 할 수 없는 아이템 정보 추출하기']

❌ 나의 오답 코드

-- 코드를 작성해주세요
select
    I.ITEM_ID,
    I.ITEM_NAME,
    I.RARITY
from
    ITEM_INFO I
    JOIN ITEM_TREE T ON T.ITEM_ID = I.ITEM_ID
WHERE
	T.PARENT_ITEM_ID IS NOT NULL # -- 먼저 NULL값 조건
    I.ITEM_ID NOT IN # -- PARENT_ID에 속하지 않은 ITME_ID는 업그레이드 할 수 없음
    (SELECT
        ITEM_ID
    FROM
        ITEM_TREE
    WHERE
        ITEM_ID IN
            (SELECT 
                PARENT_ITEM_ID 
            FROM
                ITEM_TREE
            )
     )
ORDER BY
    ITEM_ID DESC



🤔 오답 원인 분석
오류 메시지 또는 실패 원인: [예: '부분 정답으로 WHERE 조건의 순서가 잘못됨.']

근본적인 실수: [예: 'IN절에 대한 오해']

헷갈렸던 개념: [예: 'IN 절 뒤에는 컬럼이 올 수 없으며 리스트가 와야 함.']

IN 절

(X 잘못된 예시)
SELECT 
	ITME_ID
FROM
	TABLE
WHERE
	ITEM_ID IN PARENT_ITEM_ID (X) -----> 대뜸 컬럼을 집어 넣으면 안됨
    
(O 정답 예시)
SELECT 
	ITME_ID
FROM
	TABLE
WHERE
	ITEM_ID IN ------------------ (O) ---> SELECT 절의 컬럼을 넣어 리스트 형태로
    (SELECT PARENET_ITEM_ID
    FROM TABLE)
    
    
    

✅ 정답 코드 및 핵심 로직



SELECT 
	ITEM_ID, 
    ITEM_NAME, 
    RARITY
FROM 
	ITEM_INFO
WHERE 
	ITEM_ID NOT IN (
    SELECT 
    	DISTINCT PARENT_ITEM_ID --- 굳이 서브쿼리를 2번 쓰지 않음
    FROM 
    	ITEM_TREE
    WHERE 
    	PARENT_ITEM_ID IS NOT NULL -- NULL인 데이터 선 제거
)
ORDER BY 
	ITEM_ID DESC

  • 핵심 로직: PARENT_ITEM_ID에 속하지 않는 ITEM_ID는 더이상 업그레이드 할 수 없음

📚 핵심 개념 및 배운 점

  • 주요 함수/문법: IN

  • 배운 점:
    ㄴIN 뒤에는 서브쿼리나, 값 리스트가 나와야 한다
    EX) WHERE ITME_ID IN (SELECT ITEM_ID FROM MAIN)
    EX) WHERE ITEM_NAME IN ('강남구청','강남양재')


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

0개의 댓글