문제
입양 게시판에 동물 정보를 게시하려 합니다. 동물의 생물 종, 이름, 성별 및 중성화 여부를 아이디 순으로 조회하는 SQL문을 작성해주세요. 이때 프로그래밍을 모르는 사람들은 NULL이라는 기호를 모르기 때문에, 이름이 없는 동물의 이름은 "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) 을 참고해서 작성한다.
해당 Column의 값이 NULL을 반환할 때, 다른 값으로 출력할 수 있도록 하는 함수
SELECT IFNULL(Column명, "Null일 경우 대체 값") FROM 테이블명;
SELECT IFNULL(NAME,'No name')
해당 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 칼럼을 그대로 출력
해당 Column 값을 조건식을 통해 True, False를 판단하여 조건에 맞게 Column값을 변환할 때 사용하는 함수
CASE
WHEN 조건식1 THEN 식1
WHEN 조건식2 THEN 식2
...
ELSE 조건에 맞는경우가 없는 경우 실행할 식
END
SELECT ANIMAL_TYPE,
CASE
WHEN NAME IS NULL THEN "No name"
ELSE NAME
END, SEX_UPON_INTAKE
COALESCE() 함수
입력받은 여러 개의 인자 중에서 NULL이 아닌 값을 반환, 다중 ISNULL 개념을 사용하고 싶을 때 사용. 여기서 특징은 함수에 입력되는 표현식이 모두 NULL일 경우엔 결과도 NULL이 반환
SELECT COALESCE(Column명1, Column명1이 NULL인 경우 대체할 값)
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")