본문 바로가기
SQL 문제 풀기/1. 프로그래머스 SQL : 2023.12.17~2024.2.29

<프로그래머스 18> 경기도에 위치한 식품창고 목록 출력하기(Lv.1)

by HYEHYE_SON 2024. 1. 3.
728x90

 

프로그래머스에서 제공하는 SQL문제 매일 풀기 챌린지


 

문제 설명

다음은 식품창고의 정보를 담은 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 FREEZER_YN
WH0001 창고_경기1 경기도 안산시 상록구 용담로 141 Y
WH0003 창고_경기2 경기도 이천시 마장면 덕평로 811 N
WH0004 창고_경기3 경기도 김포시 대곶면 율생중앙로205번길 N

 


정답

# 오라클 정답

select warehouse_id, warehouse_name, address, 
			NVL( freezer_yn, 'N') as freezer_yn
    from food_warehouse
    	where address like '%경기%'
    	order by warehouse_id asc;
        
        
# MySQL 정답

select warehouse_id, warehouse_name, address, 
			IFNULL( freezer_yn, 'N') as freezer_yn
    from food_warehouse
    	where address like '%경기%'
    	order by warehouse_id asc;

 

 

해설해보기

# 1. SELECT 절
출력할 컬럼명들을 나열하는데, 
냉동시설 여부가 null인 경우 N으로 대체하는 함수는
select절에서 사용해줘야한다.

   ▶ 오라클 해설
   오라클에서는  null값을 n으로 대체해주는 함수는 대표적으로 NVL()이 있다.
   NVL( A, B )
   - A : 첫번째 인자로 오는 이 값은 주로 컬럼명이 온다
   - B : 첫번째 인자로 온 값이 NULL일 경우 출력될 값이 들어온다

   ▶ MySQL 해설
   MySQL 에서는 IFNULL()이라는 함수를 사용할 수 있다.
   IFNULL( A, B )
   - A : 첫번째 인자로 오는 이 값은 주로 컬럼명이 온다
   - B : 첫번째 인자로 온 값이 NULL일 경우 출력될 값이 들어온다

따라서 각 함수 안에 첫번째 인자로 냉동시설 여부 컬럼인 FREEZER_YN 을 넣어주고
두번째 인자로는 FREEZER_YN 의 값 중 NULL값이 있을 때 출력시켜야할 값인 N을 입력한다.
이때, N은 문자이므로 싱글쿼테이션 마크(')로 둘러줘야한다.


# 2. FROM 절

출력할 값들을 가지고 있는 테이블 명을 적어준다


#3. WHERE절
경기도에 위치한 창고의 데이터들만 출력하는 것이므로
ADDRESS에서 경기도라는 문자가 포함된 행들을 선별해야한다.

이럴 때 사용할 수 있는 함수는 LIKE와 와일드 카드(%)이다.
와일드 카드(%)는 그 자리에 무엇이 와도 상관없고, 개수가 몇 개가 와도 상관없다는 의미이다.
따라서 ADDRESS LIKE '%경기%'는 아래와 같이 해석할 수 있다
'경기라는 문자 앞뒤로 무엇이 와도 상관없이 그저 경기라는 문자가 포함된 주소'


# 4. ORDER BY 절
창고 ID를 기준으로 오름차순 정렬

 

 

결과 출력

 

출처 : 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges

반응형