[MySQL] NULL처리

lazy_h·2025년 12월 15일

MySQL 다루기

목록 보기
6/18
post-thumbnail

(※개인 공부 목적의 게시물입니다.)


1) 프로그래머스 > sql > select > 12세 이하인 여자환자 목록 출력하기

문제 바로가기


<문제설명>

다음은 종합병원에 등록된 환자정보를 담은 PATIENT 테이블입니다.
PATIENT 테이블은 다음과 같으며 PT_NO, PT_NAME, GEND_CD, AGE, TLNO는 각각 환자번호, 환자이름, 성별코드, 나이, 전화번호를 의미합니다.

Column nameTypeNullable
PT_NOVARCHAR(10)FALSE
PT_NAMEVARCHAR(20)FALSE
GEND_CDVARCHAR(1)FALSE
AGEINTEGERFALSE
TLNOVARCHAR(50)TRUE

<문제>

PATIENT 테이블에서 12세 이하인 여자환자환자이름, 환자번호, 성별코드, 나이, 전화번호를 조회하는 SQL문을 작성해주세요.
이때 전화번호가 없는 경우, 'NONE'으로 출력시켜 주시고, 결과는 나이를 기준으로 내림차순 정렬하고, 나이 같다면 환자이름을 기준으로 오름차순 정렬해주세요.


<풀이 코드>

SELECT PT_NAME, 
      PT_NO, 
      GEND_CD, 
      AGE, 
      IFNULL(TLNO, 'None') AS TLNO
FROM PATIENT
WHERE AGE <= 12 AND GEND_CD = 'W'
ORDER BY AGE DESC, PT_NAME;

  • IFNULL(TLNO, 'None') AS TLNO : 전화번호가 없는 경우(null인 경우), 'None' 으로 대체하여 출력해야하므로 IFNULL 함수 사용

[NULL 처리] - SELECT절에서 사용

1. IFNULL()

IFNULL(컬럼명, 'NULL일 경우 대체값')

2. CASE()

<기본구조>

CASE
	WHEN 조건식1 THEN1
	WHEN 조건식2 THEN2
  	...
	ELSE 조건에 맞는 경우가 없을 때 실행하는 식
END

<예시>

SELECT
	CASE
    	WHEN TLNO IS NULL THEN 'None' 
        ELSE TLNO
    END AS TLNO
FROM PATIENT
  • TLNO컬럼의 IS NULL 조건이 TRUE인 경우 'None' 출력
  • 조건을 충족하지 않을 경우 ELSE문을 통해 TLNO의 컬럼값 출력
  • END 이후 AS TLNO 으로 별칭지정

3. COALESCE() : 지정한 여러 표현식 중 처음으로 만나는 NULL이 아닌 값 출력(표현식이 모두 NULL일 경우 NULL 반환)

<기본구조>

#NULL 처리 상황
SELECT COALESCE(컬럼명1, '컬럼명1이 NULL인 경우 대체값')
FROM 테이블명
#베타적 OR관계 열
#컬럼1~4중 NULL이 아닌 첫번째 컬럼을 출력
SELECT COALESCE(컬럼1, 컬럼2, 컬럼3, 컬럼4)
FROM 테이블명

<예시>

SELECT COALESCE(TLNO, 'None')
FROM PATIENT
  • TLNO 컬럼의 값이 NULL인 경우 다음 표현식으로 넘어감
  • 'None'은 NULL이 아니므로 'None' 출력


2) 프로그래머스 > sql > is null > 잡은 물고기의 평균 길이 구하기

문제 바로가기


<풀이코드>

SELECT ROUND(AVG(IFNULL(LENGTH, 10)), 2) AS AVERAGE_LENGTH
FROM FISH_INFO

  • 특정 컬럼의 NULL값을 처리하는 IFNULL() 함수에 바로 집계함수를 적용할 수 있음
  • NULL값이 대체값으로 처리된 상태에서 집계가 수행됨
  • AVG(IFNULL(LENGTH, 10)) : NULL이 처리된 LENGTH 컬럼 값들의 평균을 구함
  • ROUND(AVG(IFNULL(LENGTH, 10)), 2) : LENGTH 평균값을 소수점 셋째자리에서 반올림함 -> 소수점 둘째자리까지 표현

profile
fun coding

0개의 댓글