본문 바로가기

SQL Kit/IS NULL

경기도에 위치한 식품창고 목록 출력하기 [ 프로그래머스 | SQL Kit | Level 1 ]

1. 문제목적

특정 조건에 따라 데이터를 필터링하고, 조건에 따라 데이터를 변환하거나 표시하며, 정렬된 결과를 반환하는 방법을 학습하기 위한 것이다. 이 과정을 통해 CASE, LIKE, IS NULL, 및 ORDER BY와 같은 SQL문법을 익히고 활용하는 방법을 이해하는 것이 목적이다.


2. 핵심개념

CASE 문:

SQL에서 조건에 따라 다른 값을 반환하거나 계산할 수 있는 제어 흐름 함수. CASE 문은 WHEN, THEN, ELSE, 및 END 키워드로 구성된다.

CASE
    WHEN 조건 THEN 반환값
    ELSE 반환값
END

IS NULL:

NULL 값을 검사하기 위해 사용하는 조건문. 특정 열의 값이 NULL인지 확인한다.

예: column_name IS NULL

LIKE:

문자열 데이터를 조건에 따라 검색할 때 사용된다.

  • %는 와일드카드로, 0개 이상의 문자를 대체한다.
  • 예: column_name LIKE '경기도%'는 경기도로 시작하는 모든 문자열을 검색한다.

ORDER BY:

데이터를 정렬하여 반환할 때 사용된다. 기본값은 오름차순(ASC)이며, 내림차순은 DESC를 사용한다.

  • 예: ORDER BY column_name ASC

3. 문제해결절차

  1. 문제 분석
    • FOOD_WAREHOUSE 테이블에서 경기도에 위치한 창고만 조회한다.
    • 냉동시설 여부(FREEZER_YN)가 NULL일 경우 'N'으로 표시해야 한다.
    • 결과는 창고 ID를 기준으로 오름차순으로 정렬한다.
  2. 핵심 접근법
    • WHERE 조건을 이용해 ADDRESS가 경기도로 시작하는 행만 필터링.
    • CASE와 IS NULL을 사용해 FREEZER_YN 값이 NULL이면 'N'으로 변환.
    • ORDER BY를 사용해 창고 ID를 기준으로 정렬.
  3. SQL문 설계
    • SELECT문에서 필요한 열과 변환된 FREEZER_YN 값을 선택.
    • WHERE 조건으로 주소가 경기도로 시작하는 행만 선택.
    • ORDER BY로 창고 ID를 정렬.

4. 코드작성

-- 경기도에 위치한 식품창고 목록을 출력하는 SQL문
SELECT
    WAREHOUSE_ID,             -- 창고 ID
    WAREHOUSE_NAME,           -- 창고 이름
    ADDRESS,                  -- 주소
    CASE
        WHEN FREEZER_YN IS NULL THEN 'N' -- FREEZER_YN이 NULL일 경우 'N'으로 변환
        ELSE FREEZER_YN       -- 그렇지 않으면 원래 값 유지
    END AS FREEZER_YN         -- 변환된 값을 FREEZER_YN이라는 별칭으로 지정
FROM
    FOOD_WAREHOUSE            -- 데이터를 조회할 테이블
WHERE
    ADDRESS LIKE '경기도%'      -- 주소가 '경기도'로 시작하는 행만 필터링
ORDER BY
    WAREHOUSE_ID ASC;         -- 창고 ID를 기준으로 오름차순 정렬
  • SELECT문으로 결과에 포함할 열을 선택.
  • CASE 문: FREEZER_YN 값이 NULL이면 'N'을 반환, 그렇지 않으면 원래 값을 반환.
  • WHERE 절: ADDRESS가 '경기도'로 시작하는 데이터만 선택.
  • ORDER BY: 창고 ID를 기준으로 결과를 오름차순 정렬.

5. 코드분석

  • CASE 문과 IS NULL:
  • CASE 문은 조건에 따라 값을 변환하는 데 사용되며, IS NULL은 NULL 값을 검사한다. 이 조합을 통해 FREEZER_YN 값이 NULL일 때 'N'을 반환하도록 처리했다.
  • LIKE '경기도%':
  • 와일드카드 %를 사용해 ADDRESS가 '경기도'로 시작하는 모든 데이터를 선택한다.
  • ORDER BY WAREHOUSE_ID ASC:
  • 결과를 창고 ID를 기준으로 오름차순 정렬하여 보기 쉽게 구성했다.