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

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


IFNULL() 함수를 활용한 방법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 ASC;
IF를 활용한 방법SELECT PT_NAME, PT_NO, GEND_CD, AGE, IF(ISNULL(TLNO), 'NONE', TLNO) AS TLNO
FROM PATIENT
WHERE AGE <= 12 AND GEND_CD = 'W'
ORDER BY AGE DESC, PT_NAME ASC;
CASE ~ WHEN ~ THEN을 활용한 방법SELECT PT_NAME, PT_NO, GEND_CD, AGE,
CASE
WHEN TLNO IS NULL THEN 'NONE'
ELSE TLNO
END AS TLNO
FROM PATIENT
WHERE AGE <= 12 AND GEND_CD = 'W'
ORDER BY AGE DESC, PT_NAME ASC;
COALESCE() 함수를 활용한 방법SELECT PT_NAME, PT_NO, GEND_CD, AGE, COALESCE(TLNO, 'NONE') AS TLNO
FROM PATIENT
WHERE AGE <= 12 AND GEND_CD = 'W'
ORDER BY AGE DESC, PT_NAME ASC;
IFNULL() 함수1) 조회된 데이터가 NULL인 경우
SELECT IFNULL(컬럼명, 대체할 값) AS 별칭
FROM 테이블명
⏩ 결과
2) 조회된 데이터가 아예 존재하지 않는 경우(NULL이 아니라 빈칸일 때)
max() 집계함수는 그룹내 모든 값들 중 가장 큰 값을 리턴하는데, 데이터가 아예 존재하지 않는 경우 가장 큰 값은 NULL이며, 그 결과 NULL을 '대체할 값'이 출력된다.
SELECT IFNULL(MAX(컬럼명), 대체할 값) AS 별칭
FROM 테이블명
원래 조건문 IF는 IF(조건, 참일때 값, 거짓일때 값) 과 같은 구조를 사용한다. 그렇다면, IF문을 활용해서 데이터가 없을 경우(NULL일 경우) 대체값을 출력할 수 있도록 어떻게 설정할 수 있을까?
SELECT IF(ISNULL(컬럼명), NULL일 경우 대체값, 컬럼명) AS 별칭
FROM 테이블명
CASE
WHEN 조건식1 THEN 출력값1
WHEN 조건식2 THEN 출력값2
...
ELSE 위의 모든 조건에 만족하지 않을 경우의 출력값
END
SELECT
CASE
WHEN 컬럼명 IS NULL THEN '대체할 값'
ELSE 컬럼명
END AS 별칭
FROM 테이블명
COALESCE 함수COALESCE() 함수는 주어진 인수에서 NULL이 아닌 첫번째 값을 반환한다.
IFNULL() 함수와 역할은 비슷하지만 차이가 있다면,
IFNULL(val, '대체할 값')는 인수가 2개 밖에 없으므로 하나가 NULL이면 대체값을 출력한다. (순서 무관)COALESCE(val1, val2, val3, ...)는 여러개의 인수가 가능하며, 처음으로 NULL이 아닌 값을 출력한다.SELECT COALESCE(컬럼명1, 컬럼명2, 컬럼명3, ...) AS 별칭
FROM 테이블명
SELECT COALESCE(컬럼명, 대체할 값) AS 별칭
FROM 테이블명