프로그래머스 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 사용
😉 리뷰