HackerRank Intermediate
- Binary Tree Nodes
👉 문제 바로가기(HackerRank)
-- Find the node type of Binary Tree(Root, Leaf, Inner)
-- Order by the value of the node
-- 풀이1) IN 구문 활용
SELECT
N,
CASE WHEN P IS NULL THEN 'Root'
WHEN P IS NOT NULL AND
N NOT IN (SELECT P AS N FROM BST WHERE P IS NOT NULL) THEN 'Leaf'
ELSE 'Inner'
END AS NODE
FROM BST
ORDER BY N
-- 풀이2) EXISTS 구문 활용
SELECT N,
CASE WHEN p IS NULL THEN 'Root'
WHEN EXISTS (select P from BST t1 where t2.N = t1.P) THEN 'Inner'
ELSE 'Leaf' END AS NODE
FROM BST t2
ORDER BY N
[ 논리 과정 ]
- 노드 유형인 Root, Leaf, Inner 조건 정리
IN
구문을 통해 조건 비교하여 유형 구분 후 출력
[ 문제 상황 ]
IN
구문은 조건을 비교할 때 서브쿼리를 먼저 실행해 결과를 메모리에 저장하고 메인쿼리에 비교하기 때문에 서브 쿼리의 row가 많을수록EXISTS
보다 성능이 떨어지게 된다.- 서브 쿼리 ROW가 많다고 가정했을 때, 쿼리 성능 개선이 요구된다.
[ 해결 ]
IN
구문 대신EXISTS
구문을 사용하여 조건을 비교해 부합하는 데이터를 선별한다.
[ 회고 ]
EXISTS
구문과IN
구문의 차이EXISTS
: 메인 쿼리의 각 ROW에 대해 서브쿼리를 실행하고, 서브쿼리가 결과를 반환하는지 여부를 확인합니다. (메인 쿼리 > 서브 쿼리)- 작동 방식
- 메인 쿼리의 각 행에 대해 서브쿼리를 반복적으로 실행합니다.
- 서브쿼리가 조건을 만족하는지 확인하고, 만족하는 행이 있으면 TRUE를 반환하여 메인 쿼리가 해당 행을 포함합니다.
- 조건이 충족되면 바로 종료하므로 전체 서브쿼리를 실행하지 않아도 됩니다.
- 작동 방식
IN
: 메인 쿼리에서 주어진 값이 서브쿼리의 결과 집합에 포함되는지 확인 (서브 쿼리 > 메인 쿼리)- 작동 방식
- 서브쿼리가 먼저 실행되어 결과를 메모리에 저장합니다.
- 메인 쿼리는 저장된 결과와 비교하여 일치하는 행을 반환합니다.
- 작동 방식
'DA Study > TIL' 카테고리의 다른 글
[TIL] Window함수로 Median 구하기 # MySQL # SQL (1) | 2025.01.06 |
---|---|
[TIL] 감정 분석 - 토큰별 Polarity 값 추가하기 #python3 #FC온라인 (0) | 2025.01.04 |
[TIL] 리스트 컴프리헨션(List Comprehension) #python3 #FConline (0) | 2025.01.02 |
[TIL] 비트연산자를 활용한 이진수 비교 # MYSQL # SQL (1) | 2025.01.01 |
[TIL] SUM함수, CASE WHEN ~ THEN 구문 활용 #SQL #SQLite #solvesql (1) | 2024.12.30 |