-
[MySQL] (IS NULL) 경기도에 위치한 식품창고 목록 출력하기코딩테스트/MySQL 2024. 8. 18. 19:01728x90반응형
https://school.programmers.co.kr/learn/courses/30/lessons/131114
문제 설명
다음은 식품창고의 정보를 담은 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 WAREH
OUSE_NAMEADDRESS TLNO FREEZER_YN WH0001 창고_경기1 경기도 안산시 상록구 용담로 141 031-152-1332 Y WH0002 창고_충북1 충청북도 진천군 진천읍 씨제이로 110 043-623-9900 N 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 NULL WH0004 창고_경기3 경기도 김포시 대곶면 율생중앙로205번길 N 문제풀이
이번 문제는 다양한 방법으로 풀 수가 있다.
<해야하는 것>
1) FAT1. COALESCE 사용
SELECT WAREHOUSE_ID, WAREHOUSE_NAME, ADDRESS, COALESCE(FREEZER_YN, 'N') AS FREEZER_YN FROM FOOD_WAREHOUSE WHERE ADDRESS LIKE '경기도%' ORDER BY WAREHOUSE_ID ASC;
COALESCE(A, B)는 A 자리에 있는 데이터가 NULL일 경우 B 자리의 데이터로 대체하는 코드이다.
2. IFNULL 사용
SELECT WAREHOUSE_ID, WAREHOUSE_NAME, ADDRESS, IFNULL(FREEZER_YN, 'N') AS FREEZER_YN FROM FOOD_WAREHOUSE WHERE ADDRESS LIKE '경기도%' ORDER BY WAREHOUSE_ID ASC;
IFNULL(A, B)는 A 컬럼의 값이 NULL일 경우 B 컬럼으로 대체하는 코드이다.
3. CASE 사용
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 조건 절이 참이면 THEN으로 대체한다. 여러 개로도 사용이 가능하다.
WHEN 조건에 만족하는 것이 없는 경우 ELSE로 조건을 나누어 준다. END로 끝을 나타낸다.4. IF 사용
SELECT WAREHOUSE_ID, WAREHOUSE_NAME, ADDRESS, IF(FREEZER_YN IS NULL, 'N', FREEZER_YN) AS FREEZER_YN FROM FOOD_WAREHOUSE WHERE ADDRESS LIKE '경기도%' ORDER BY WAREHOUSE_ID ASC;
IF(A, B, C)는 A가 참이면 B로 대체, 거짓이면 C를 반환한다. 이 코드에서는 FREEZER_YN이 IS NULL 일 때 N으로 대체되고, 거짓일 때는 FREEZER_YN 값을 반환한다.
728x90반응형'코딩테스트 > MySQL' 카테고리의 다른 글
[MySQL] (SELECT) 역순 정렬하기 (0) 2024.08.18 [MySQL] (SELECT) 흉부외과 또는 일반외과 의사 목록 출력하기 (0) 2024.08.18 [MySQL] (IS NULL) 이름있는 동물의 아이디 (0) 2024.08.18 [MySQL] (SELECT) 상위 n개 레코드 (0) 2024.08.18 [MySQL] (SELCT) 여러 기준으로 정렬하기 (0) 2024.08.18