CodeGym /행동 /SQL SELF /NULL 값 체크하기: IS NULL 과 IS NOT NULL

NULL 값 체크하기: IS NULL 과 IS NOT NULL

SQL SELF
레벨 9, 레슨 1
사용 가능

오늘은 NULL — 데이터베이스의 보이지 않는 히어로 — 를 더 파헤쳐볼 거야. 아직도 NULL이 그냥 "아무것도 없음"이라고 생각한다면, 맞긴 한데 그게 다는 아니야. 이번 강의에서는 데이터에 NULL이 있는지 체크하는 방법이랑 그걸로 뭘 할 수 있는지 배워볼 거야. 자, 값이 없는 걸 추적할 준비됐지?

일단 간단하게 시작해보자 — 네가 인터넷 쇼핑몰 데이터베이스를 다룬다고 상상해봐. 주문 테이블이 있는데, 어떤 주문은 코멘트 정보가 없고, 어떤 주문은 비고가 적혀있어. 만약 비어있는 비고가 있는 주문을 찾으려고 그냥 =, <> 같은 비교 연산자를 쓰면... 놀랄 거야. 왜냐면 NULL은 특별한 케이스거든!

SQL에서 NULL이 있는지 없는지 체크할 때는 IS NULL 이랑 IS NOT NULL 연산자를 써야 해. 이 연산자들이 NULL을 다루고 원하는 데이터를 뽑아내는 데 도움을 줘.

IS NULL로 값 체크하기

IS NULL은 컬럼이나 표현식이 NULL 값을 가지고 있는지 확인할 때 써.

SELECT *
FROM orders
WHERE comment IS NULL;

이 쿼리는 comment 컬럼 값이 NULL인 모든 행을 반환해. 비고가 없는 주문을 찾고 싶을 때 딱이야.

여기 orders 테이블 예시가 있어:

id customer_name total_amount comment
1 Otto Art 1500 "급한 배송"
2 Maria Chi 3000 NULL
3 Alex Lin 2000 ''
4 Anna Song 5000 NULL

쿼리:

SELECT id, customer_name
FROM orders
WHERE comment IS NULL;

결과:

id customer_name
2 Maria Chi
4 Anna Song

빈 문자열 ''이 있는 행은 포함되지 않는 거 봤지? ''은 NULL이 아니거든.

IS NOT NULL로 값 체크하기

IS NOT NULL은 반대로, 값이 NULL이 아닌지 확인해. 예를 들어, 코멘트가 적혀있는 주문만 보고 싶으면 이렇게 해:

SELECT *
FROM orders
WHERE comment IS NOT NULL;

이 쿼리는 comment 컬럼에 값이 있는(빈 문자열 ''도 포함) 행만 반환해.

예시

orders 테이블은 그대로야.

id customer_name total_amount comment
1 Otto Art 1500 "급한 배송"
2 Maria Chi 3000 NULL
3 Alex Lin 2000 ''
4 Anna Song 5000 NULL

쿼리 실행:

SELECT id, customer_name, comment
FROM orders
WHERE comment IS NOT NULL;

결과:

id customer_name comment
1 Otto Art "급한 배송"
3 Alex Lin ''

빈 문자열 ''이 포함된 행도 결과에 들어가. SQL에서는 이걸 "비어있지 않다"고 봐.

IS NULL과 IS NOT NULL 언제 써야 할까?

이런 상황에서 쓸 수 있어:

  1. 데이터 필터링: 값이 없는 불완전한 레코드를 빼고 싶을 때.
  2. 에러 처리: 가끔 NULL이 데이터 입력 실수일 수도 있으니, 그런 행만 따로 뽑고 싶을 때.
  3. 데이터 분석: 누락된 값이 몇 개인지 세서 데이터 품질을 파악할 때.

실전 예제

실제로 몇 가지 문제를 풀어보자:

문제 1: 생년월일이 없는 학생 찾기

예를 들어, students 테이블이 있다고 해보자:

id name birth_date
1 Otto Art 2000-05-10
2 Maria Chi NULL
3 Alex Lin 1998-12-30
4 Anna Song NULL

쿼리:

SELECT name
FROM students
WHERE birth_date IS NULL;

결과:

name
Maria Chi
Anna Song

이 쿼리는 생년월일을 확인해야 하는 학생을 찾을 때 유용해.

문제 2: 코멘트가 있는 주문 찾기

id customer_name total_amount comment
1 Otto Art 1500 "급한 배송"
2 Maria Chi 3000 NULL
3 Alex Lin 2000 ''
4 Anna Song 5000 NULL

orders 테이블에서 코멘트가 있는 주문을 찾으려면:

SELECT customer_name, comment
FROM orders
WHERE comment IS NOT NULL;

결과:

customer_name comment
Otto Art "급한 배송"
Alex Lin ''

일반 연산자와 비교

이제 한 번 "잘못된" 쿼리로 NULL 체크를 해보자:

SELECT *
FROM orders
WHERE comment = NULL;

놀랐지? 이 쿼리는 comment가 NULL인 행이 있어도 아무것도 반환하지 않아. 왜냐면 NULL은 일반 연산자로 비교할 수 없거든. 이런 비교에는 꼭 IS NULL을 써야 해.

2
과제
SQL SELF, 레벨 9, 레슨 1
잠금
값이 없는 레코드 찾기
값이 없는 레코드 찾기
2
과제
SQL SELF, 레벨 9, 레슨 1
잠금
사용 가능한 데이터로 필터링하기
사용 가능한 데이터로 필터링하기
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION