728x90
프로그래머스에서 제공하는 SQL문제 매일 풀기 챌린지
문제 설명
다음은 식품창고의 정보를 담은 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 |
정답
# 오라클 정답
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
반응형
'SQL 문제 풀기 > 1. 프로그래머스 SQL : 2023.12.17~2024.2.29' 카테고리의 다른 글
<프로그래머스 20> 과일로 만든 아이스크림 고르기(Lv.1) (2) | 2024.01.05 |
---|---|
<프로그래머스 19> 인기있는 아이스크림(Lv.1) (0) | 2024.01.04 |
<프로그래머스 17> 가장 비싼 상품 구하기(Lv.1) (2) | 2024.01.02 |
<프로그래머스 16> 12세 이하인 여자 환자 목록 출력하기(Lv.1) (0) | 2024.01.01 |
<프로그래머스 15> 모든 레코드 조회하기(Lv.1) (2) | 2023.12.31 |