본문 바로가기

Skill Sets/SQL

[SQL] 이름이 없는 동물의 아이디(프로그래머스/MySQL)

SMALL

안녕하세요! 데코입니다!

오늘은 프로그래머스 코딩테스트 연습에 있는 "이름이 없는 동물의 아이디" 문제를 포스팅하려고 합니다!

 

바로 포스팅 시작할게요! :)

(출처 : https://school.programmers.co.kr/learn/courses/30/lessons/59039)

1. 문제 :  이름이 없는 동물의 아이디(Lv. 1)

2. 문제 설명

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다.

 ANIMAL_INS 테이블 구조는 다음과 같으며,

ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는

각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.

 

[ 테이블 구조 ]

NAME TYPE NULLABLE
ANIMAL_ID VARCHAR(N) FALSE
ANIMAL_TYPE VARCHAR(N) FALSE
DATETIME DATETIME FALSE
INTAKE_CONDITION VARCHAR(N) FALSE
NAME VARCHAR(N) TRUE
SEX_UPON_INTAKE VARCHAR(N) FALSE

 

동물 보호소에 들어온 동물 중, 이름이 없는 채로 들어온 동물의 ID를 조회하는 SQL 문을 작성해주세요.

단, ID는 오름차순 정렬되어야 합니다.

 

[ 예시 ]

예를 들어 ANIMAL_INS 테이블이 다음과 같다면

ANIMAL_ID ANIMAL_TYPE DATETIME INTAKE_CONDITION NAME SEX_UPON_INTAKE
A368930 Dog 2014-06-08 13:20:00 Normal NULL Spayed Female
A524634 Dog 2015-01-02 18:54:00 Normal *Belle Intact Female
A465637 Dog 2017-06-04 08:17:00 Injured *Commander Neutered Male

이름이 없는 채로 들어온 동물의 ID는 A368930입니다.

따라서 SQL을 실행하면 다음과 같이 출력되어야 합니다.

 

[ 출력 결과 ]

ANIMAL_ID
A368930

 

3. 문제 풀이

# 1안
SELECT ANIMAL_ID 
FROM ANIMAL_INS
WHERE NAME IS NULL
ORDER BY ANIMAL_ID ASC

 

이번 문제는 1안 한가지로 작성했습니다!

 

# 1안 풀이 설명

## [ 문제 접근 및 NULL 설명 ]

문제에서 '이름이 없는 채로 들어온 동물'을 조회하려고 명시하고 있고

이름을 나타내는 컬럼은 'NAME'이라는 것을 예시를 통해 알 수 있습니다!

 

따라서 'NAME' 컬럼이 NULL 값으로 들어가 있는 동물의 ID는 조회하면 됩니다!

 

NULL 값에 대하여 처음 들으신 분들도 있을 것 같아서 간단하게 설명하면

NULL은 데이터베이스(DB) 내에서 데이터값이 존재하지 않는다고 나타내는 것을 의미해요! 

값이 아직 정의되지 않은 것이므로, 0과 " "과는 다른 의미입니다!

 

SQL에서는 NULL인 값들을 판단하는 것은 'IS NULL' 과 'IS NOT NULL'을 이용하여 판단할 수 있어요!

 

## [ 코드 작성 설명 ]

 

ANIMAL_INS의 테이블에 존재하는 컬럼들이 [출력 결과]에 나와 있는 컬럼들과 동일하게

" SELECT "를 통해 'ANIMAL_ID' 컬럼만을 보여주고

 

" WHERE "을 통해 'NAME' 컬럼의 값이 NULL인 지를 IS NULL(= NULL 값이다)으로 판단하여 필터링했어요!

( 'NAME' 컬럼의 값이 NULL인 행을 조회)

 

" ORDER BY (컬럼) ASC "를 통해 'ANIMAL_ID' 컬럼의 오름차순으로 조회 결과가 나타나게 코드를 작성했어요!

 


4. 데코의 문제 풀이 후기

이번 문제는 NULL 값의 개념을 이해하고 조회하는 문제예요!

 

이전 포스팅에서는 WHERE 문에 부호를 이용해서 특정 조건에 만족하는 값들을 조회하였는데,

 

NULL 값은 부호를 이용하여 조회를 하는 것이 아닌, NULL을 다루는 함수인 IS NULL과 IS NOT NULL을 이용하여 조건에 만족하는 값들을 조회했습니다!

 

분석가가 이용하기 좋은 데이터에는 NULL 값이 없으면 물론 좋지만

시스템 문제라든지 알 수 없는 이유로 인입된 데이터에 NULL 값이 있는 것을 볼 수 있었습니다!

 

NULL 값을 제외 혹은 값을 대체하여 넣은 후 분석에 이용해도 되지만

이건 테이블에 대한 이해가 선행되어야 하기 때문에

데이터를 파악하기에는 NULL 값들을 제외하고 먼저 파악하는 게 좋은 것 같아요!

(제 개인적인 의견입니다...!) 

 

이번 문제는 WHERE 문을 이용해 NULL 값인 데이터를 조회하는 문제를 풀어봤습니다!

 

설명이 어려운 부분 혹은 잘 이해가 안 가는 부분은 그리고 더 궁금한 내용이 있다면

언제든지 댓글로 남겨주세요!
빠르게 궁금증을 해결해드릴게요!

공감과 댓글은 큰 힘이 됩니다!
읽어주셔서 감사해요!

 

또 다른 SQL 문제로 찾아뵐게요!

 

LIST