[IS NULL] 경기도에 위치한 식품창고 목록 출력하기

2024. 9. 14. 18:00SQL 고득점 Kit/IS NULL

https://school.programmers.co.kr/learn/courses/30/lessons/131114

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


문제 설명
다음은 식품창고의 정보를 담은 FOOD_WAREHOUSE 테이블입니다. FOOD_WAREHOUSE 테이블은 다음과 같으며 WAREHOUSE_IDWAREHOUSE_NAMEADDRESSTLNOFREEZER_YN는 창고 ID, 창고 이름, 창고 주소, 전화번호, 냉동시설 여부를 의미합니다.

Column name Type Nullable
WAREHOUSE_ID VARCHAR(10) FALSE
WAREHOUSE_NAME VARCHAR(20) FALSE
ADDRESS VARCHAR(100) TRUE
TLNO VARCHAR(20) TRUE
FREEZER_YN VARCHAR(1) TRUE

문제
FOOD_WAREHOUSE 테이블에서 경기도에 위치한 창고의 ID, 이름, 주소, 냉동시설 여부를 조회하는 SQL문을 작성해주세요. 이때 냉동시설 여부가 NULL인 경우, 'N'으로 출력시켜 주시고 결과는 창고 ID를 기준으로 오름차순 정렬해주세요.


예시
FOOD_WAREHOUSE 테이블이 다음과 같을 때

WAREHOUSE_ID WAREHOUSE_NAME ADDRESS TLNO FREEZER_YN
WH0001 창고_경기1 경기도 안산시 상록구 용담로 141 031-152-1332 Y
WH0002 창고_충북1 충청북도 진천군 진천읍 씨제이로 110 043-623-9900 Y
WH0003 창고_경기2 경기도 이천시 마장면 덕평로 811 031-221-7241 NULL
WH0004 창고_경기3 경기도 김포시 대곶면 율생중앙로205번길 031-671-1900 N
WH0005 창고_충남1 충청남도 천안시 동남구 광덕면 신덕리1길 9 041-876-5421 Y


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

WAREHOUSE_ID WAREHOUSE_NAME ADDRESS TLNO FREEZER_YN
WH0001 창고_경기1 경기도 안산시 상록구 용담로 141 031-152-1332 Y
WH0003 창고_경기2 경기도 이천시 마장면 덕평로 811 031-221-7241 N
WH0004 창고_경기3 경기도 김포시 대곶면 율생중앙로205번길 031-671-1900 N

창고 정보가 담긴 테이블이 주어졌을 때, 경기도에 위치한 창고의 창고 ID, 창고 이름, 주소, 냉동장치 여부를 조회하는 문제입니다.

이때, 냉동장치 여부가 비어있다면(NULL), 해당 값을 N으로 처리하여 출력합니다.

 

냉동장치 여부에 따라서 값을 다르게 출력해야 하는 문제로, CASE WHEN절을 사용하는 문제입니다.

FREEZER_YN이 NULL이라면 N을, 값이 있다면 그대로 출력해야 하는 조건인거죠.

경기도에 위치한 지는 주소의 시작이 '경기도' 세 글자로 시작하는지 확인하면 됩니다.

 

정답 코드를 작성해보겠습니다.

  SELECT WAREHOUSE_ID, WAREHOUSE_NAME, ADDRESS,
         CASE WHEN FREEZER_YN IS NULL THEN 'N' 
              ELSE FREEZER_YN END AS FREEZER_YN
    FROM FOOD_WAREHOUSE
   WHERE ADDRESS LIKE "경기도%"
ORDER BY WAREHOUSE_ID ASC;

 

위에 작성한대로, CASE WHEN절을 사용해 FREEZER_YN 여부에 따라 출력을 다르게 작성했습니다.

또한 '경기도'로 시작하는 값들만 출력하도록 WHERE 조건절을 활용했습니다.

정렬 기준으로 창고 ID를 기준으로 오름차순을 구현하면 문제를 해결할 수 있습니다.