본문 바로가기
Language/DB

[Programmers | SQL | IS NULL 문제 풀이] 경기도에 위치한 식품창고 목록 출력하기 - Solution with (MySQL)IFNULL, (Oracle)NVL

by ㅇ달빛천사ㅇ 2024. 6. 11.
728x90

KDT 실무형 스프링 백엔드 엔지니어 양성과정 6기 | SQL CODEKATA

🏭 경기도에 위치한 식품창고 목록 출력하기

🏷 관련 주제 : IFNULL NVL LIKE



문제 설명

다음은 식품창고의 정보를 담은 FOOD_WAREHOUSE 테이블입니다.
FOOD_WAREHOUSE 테이블은 다음과 같으며 WAREHOUSE_ID, WAREHOUSE_NAME, ADDRESS, TLNO, FREEZER_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 FREEZER_YN
WH0001 창고_경기1 경기도 안산시 상록구 용담로 141 Y
WH0003 창고_경기2 경기도 이천시 마장면 덕평로 811 N
WH0004 창고_경기3 경기도 김포시 대곶면 율생중앙로205번길 N


✔ (Oracle) Solution with NVL

SELECT WAREHOUSE_ID
       , WAREHOUSE_NAME
       , ADDRESS
       , NVL(FREEZER_YN, 'N') FREEZER_YN 
  FROM FOOD_WAREHOUSE
  WHERE ADDRESS LIKE '%경기도%'
  ORDER BY WAREHOUSE_ID ASC;
실행 결과


✔ (MySQL) Solution with IFNULL

SELECT WAREHOUSE_ID
       , WAREHOUSE_NAME
       , ADDRESS
       ,IFNULL(FREEZER_YN, 'N') FREEZER_YN
  FROM FOOD_WAREHOUSE
  WHERE ADDRESS LIKE '경기도%'
  ORDER BY WAREHOUSE_ID;
실행 결과


💥 오늘 만난 문제 & 나의 시도 💦 & 해결 방법 👍

📌 오늘 만난 문제 : FOOD_WAREHOUSE 테이블에서 경기도에 위치한 창고의 ID, 이름, 주소, 냉동시설 여부를 조회하는 SQL문을 작성해주세요.

이 때, 냉동시설 여부가 NULL인 경우, 'N'으로 출력시켜 주시고 결과는 창고 ID를 기준으로 오름차순 정렬해주세요.


1. FOOD_WAREHOUSE 테이블에서 창고의 ID, 이름, 주소, 냉동시설 여부 조회하기

SELECT WAREHOUSE_ID
       , WAREHOUSE_NAME
       , ADDRESS
       ,FREEZER_YN
  FROM FOOD_WAREHOUSE;
실행 결과

주소가 경기도가 아닌 인스턴스도 모두 조회되어있다.


2. 위의 조회 결과에서 주소가 경기도인 인스턴스만 조회하자.

SELECT WAREHOUSE_ID
       , WAREHOUSE_NAME
       , ADDRESS
       ,FREEZER_YN
  FROM FOOD_WAREHOUSE
  WHERE ADDRESS LIKE '경기도%';
실행 결과

FREEZER_YN이 NULL인 인스턴스들이 보인다.



🚫 NULL 처리하는 방법

  • Oracle : NVL()
  • MySQL : IFNULL()

이 외의 방법도 있으나 나는 위의 방법을 사용하였다.


3. 냉동시설 여부의 NULL을 'N' 바꿔서 조회하자.

이왕이면 FREEZER_YN이라고 별칭도 주자.

SELECT WAREHOUSE_ID
       , WAREHOUSE_NAME
       , ADDRESS
       ,IFNULL(FREEZER_YN, 'N') FREEZER_YN
  FROM FOOD_WAREHOUSE
  WHERE ADDRESS LIKE '경기도%';
실행 결과

정렬을 안했지만 제출하면 성공이라고 뜬다.😜
그래도 ORDER BY절을 써 주자.

4. 창고 ID를 기준으로 오름차순으로 정렬하자.

SELECT WAREHOUSE_ID
       , WAREHOUSE_NAME
       , ADDRESS
       ,IFNULL(FREEZER_YN, 'N') FREEZER_YN
  FROM FOOD_WAREHOUSE
  WHERE ADDRESS LIKE '경기도%'
  ORDER BY WAREHOUSE_ID;
실행 결과

💬 무엇을 새롭게 알았는지

MySQL과 Oracle 문법으로 NULL 처리하기

728x90


Top