프로그래머스 SQL kit

[SELECT] 업그레이드 된 아이템 구하기

정호나 2024. 12. 27. 15:34

📕 문제

 

https://school.programmers.co.kr/learn/courses/30/lessons/273711

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

 

📄 풀이

- 문제이해

 

업그레이드 가능한 모든 아이템의 아이템 출력

-> ITEM_TREE테이블에서 PARENT_ITEM_ID가 NULL이 아닌 ITEM_ID 출력

 

 

- 풀이

# 모든 다음 업그레이드 아이템 출력
# 1. INNER JOIN 사용해서 'RARE'인 ITEM_ID 가져오기
# 2. 서브쿼리 사용 -> 서브쿼리 위치
#  서브위리 안에서는 서브쿼리 밖의 별칭 사용불가? 

 

💻 내 코드

 

SELECT I.ITEM_ID, I.ITEM_NAME, I.RARITY
FROM ITEM_INFO I
INNER JOIN ITEM_TREE T
ON I.ITEM_ID = T.ITEM_ID

WHERE T.PARENT_ITEM_ID 

    IN (SELECT ITEM_ID
        FROM ITEM_INFO
        WHERE RARITY = 'RARE'
       )

ORDER BY ITEM_ID DESC

 

 

📁 참고자료

 

https://inpa.tistory.com/entry/MYSQL-📚-서브쿼리-정리

 

 

 

 

☺️ 새로 알게 된 지식

 

1. 서브쿼리 실행 순서 : 서브쿼리 실행 -> 부모(메인) 쿼리 실행

 

1-1) 서브쿼리 안에서는 서브쿼리 밖의 별칭 사용불가?

-> 실행순서땜에 안돼

 

2. 서브쿼리 위치

 

대표적) SELECT절, FROM절, WHERE절

#서브쿼리 명칭
SELECT col1, (SELECT ...) -- 스칼라 서브쿼리(Scalar Sub Query): 하나의 컬럼처럼 사용 (표현 용도)
FROM (SELECT ...)         -- 인라인 뷰(Inline View): 하나의 테이블처럼 사용 (테이블 대체 용도)
WHERE col = (SELECT ...)  -- 일반 서브쿼리: 하나의 변수(상수)처럼 사용 (서브쿼리의 결과에 따라 달라지는 조건절)Copy

 

2-1) 스칼라 서브쿼리 : 1개 레코드만 리턴

2-2) 인라인 뷰 : 무조건 AS 별칭 사용

2-3) 일반 서브쿼리 : <,>, in, any, all 사용

 

😉 리뷰