[IS NULL] NULL 처리하기

쥬쥬스·2023년 8월 4일
0

SQL

목록 보기
26/67
post-thumbnail

문제와 해결방법

문제
입양 게시판에 동물 정보를 게시하려 합니다. 동물의 생물 종, 이름, 성별 및 중성화 여부를 아이디 순으로 조회하는 SQL문을 작성해주세요. 이때 프로그래밍을 모르는 사람들은 NULL이라는 기호를 모르기 때문에, 이름이 없는 동물의 이름은 "No name"으로 표시해 주세요.

🎨 조건

  • 종, 이름, 성별 및 중성화 여부 조회
  • 아이디 순
  • 이름 값이 비어있는 경우 'No name'으로 처리

sql 코드

SELECT ANIMAL_TYPE, IFNULL(NAME,'No name'), SEX_UPON_INTAKE
FROM ANIMAL_INS
ORDER BY ANIMAL_ID

WHERE절에서 CASE-WHEN구문으로

(CASE WHEN NAME IS NULL THEN 'NO NAME' END)

처리하면 되는줄 알았으나, 이건 테이블 자체가 조회가 안됐다. 찾아보니까 이 경우에서는 WHERE절에서 사용해서 그런 것 같고, NULL이 아닌 경우는 어떻게 처리할건지 조건을 달아주지 않았기 때문에 오류가 생긴 것 같다.

MySQL NULL 처리(IFNULL, CASE, COALESCE) 을 참고해서 작성한다.

NULL을 처리하는 방법

1. IFNULL

해당 Column의 값이 NULL을 반환할 때, 다른 값으로 출력할 수 있도록 하는 함수

SELECT IFNULL(Column, "Null일 경우 대체 값") FROM 테이블명; 
  • 예시 (해당 문제)
SELECT IFNULL(NAME,'No name')

2. ISNULL

해당 Column이 NULL값에 해당할 경우, 다른 값으로 대체

ISNULL(칼럼, '칼럼이 NULL일경우 대체할 값')

기본 문법과 다르게 다음과 작성하면 파라미터 오류가 난다.

ISNULL(NAME,"No name")

해당 ISNULL함수는 MS-SQL과 관련되어 있어서 MySQL에서 사용할 때는 IF조건과 함께 사용해준다

  • 예시 (해당 문제)
SELECT IF(ISNULL(NAME), "No name", NAME)

NULL이 TRUE인 경우에는 'No name'으로, 아닌 경우는 NAME 칼럼을 그대로 출력

3. CASE

해당 Column 값을 조건식을 통해 True, False를 판단하여 조건에 맞게 Column값을 변환할 때 사용하는 함수

CASE 
    WHEN 조건식1 THEN1
    WHEN 조건식2 THEN2
    ...
    ELSE 조건에 맞는경우가 없는 경우 실행할 식
END
  • 예시 (해당 문제)
SELECT ANIMAL_TYPE,
    CASE
        WHEN NAME IS NULL THEN "No name"
        ELSE NAME
    END, SEX_UPON_INTAKE

4. COALESCE

COALESCE() 함수
입력받은 여러 개의 인자 중에서 NULL이 아닌 값을 반환, 다중 ISNULL 개념을 사용하고 싶을 때 사용. 여기서 특징은 함수에 입력되는 표현식이 모두 NULL일 경우엔 결과도 NULL이 반환

SELECT COALESCE(Column1, Column1NULL인 경우 대체할 값)
FROM 테이블명
DECLARE
 @A_Code int = NULL
 @B_Code int = NULL
 @C_Code int = 10248;
 
 이 경우에 COALESCE를 사용하면 다음과 같이 된다

SELECT COALESCE(@A_Code, @B_Code, @C_Code);

 이렇게 하게 되면 출력은 NULL값이 아닌 C_Code의 값만 출력된다
  • 예시 (해당 문제)
SELECT COALESCE(NAME, "No name")
profile
느려도... 꾸준히.....🐌

0개의 댓글