[SQL] NULL비교연산

HyeonSeok·2023년 10월 13일
0

CS

목록 보기
3/3

❓Hakerrank 문제

예시)

출처

문제 공략

  1. P = null이면 Root출력
  2. P에 N이 존재하지 않으면 Leaf노드로 간주
  3. 이외의 값들은 Inner로 간주

초기 정답

SELECT N, (
    CASE 
        WHEN P IS null THEN 'Root'        
        WHEN N NOT IN (SELECT DISTINCT P FROM BST) THEN 'Leaf'
        ELSE 'Inner'
    END
)
FROM BST
ORDER BY 1;

수정한 정답

SELECT N, (
    CASE 
        WHEN P IS null THEN 'Root'        
        WHEN N NOT IN (SELECT DISTINCT P FROM BST WHERE P IS NOT NULL) THEN 'Leaf'
        ELSE 'Inner'
    END
)
FROM BST
ORDER BY 1;

💯오답노트

초기에 푼 문제를 보면

... 
WHEN N NOT IN (SELECT DISTINCT P FROM BST) THEN 'Leaf'
...

위와 같은 형태로 되어있는데 여기서 Nnull값과 비교하게 된다는 것이다.
null값은 비교연산 시 결과가 unknown이 되는데 이것은 항상 ELSE구문으로 넘어가기 때문에 오류가 발생한 것.

정리

  • null값은 비교연산 시 결과가 unknown이 된다
  • unknownELSE구문으로 넘어간다.
profile
즐겁게 사는 개발자가 됩시다

0개의 댓글