본문 바로가기

SQL Kit/SELECT

3월에 태어난 여성 회원 목록 출력하기 [ 프로그래머스 | SQL Kit | Level 2 ]

1. 문제목적

특히 조건문(WHERE)과 날짜 처리 함수(MONTH), 결과 정렬(ORDER BY)을 활용하는 방법을 익히는 데 목적이 있다.

  • WHERE 절을 통한 조건 필터링
  • MONTH 함수를 사용한 특정 달의 데이터 추출
  • ORDER BY 절을 사용한 정렬
  • DATE_FORMAT을 활용한 날짜 데이터 출력 형식 변환
  • NULL 값 필터링

2. 핵심개념

WHERE 절

  • 특정 조건에 맞는 데이터를 필터링하는 데 사용된다.
  • 예: WHERE GENDER = 'W'는 성별이 여성인 데이터를 필터링한다.

MONTH() 함수

  • 날짜 데이터에서 월(month)을 추출하는 데 사용된다.
  • 사용법: MONTH(컬럼명)
  • 예: MONTH(DATE_OF_BIRTH) = 3는 3월에 태어난 데이터를 필터링한다.

DATE_FORMAT() 함수

  • 날짜를 지정된 형식으로 변환해 출력한다.
  • 사용법: DATE_FORMAT(컬럼명, '형식')
  • 예: DATE_FORMAT(DATE_OF_BIRTH, '%Y-%m-%d')는 날짜를 YYYY-MM-DD 형식으로 변환한다.

ORDER BY 절

  • 데이터를 정렬하는 데 사용된다.
  • 예: ORDER BY MEMBER_ID ASC는 회원 ID를 기준으로 오름차순 정렬한다.

NULL 값 처리 (IS NOT NULL)

  • 특정 컬럼의 값이 NULL인 데이터를 제외할 때 사용된다.
  • 예: TLNO IS NOT NULL은 전화번호가 NULL이 아닌 데이터를 필터링한다.

3. 문제해결절차

  1. 문제 이해
    • GENDER가 W(여성)이고 MONTH(DATE_OF_BIRTH)가 3(3월)인 회원만 조회.
    • TLNO가 NULL이 아닌 데이터만 포함.
    • MEMBER_ID 기준으로 오름차순 정렬.
  2. 접근 방법
    • WHERE 조건을 사용해 필터링:생일이 3월(MONTH(DATE_OF_BIRTH) = 3).
    • 전화번호가 NULL이 아님(TLNO IS NOT NULL).
    • 성별이 여성(GENDER = 'W').
    • ORDER BY로 정렬:
    • MEMBER_ID 기준 오름차순(ASC).
    • DATE_FORMAT으로 날짜 출력 형식 지정.
  3. SQL 작성 및 테스트
    • 필터 조건과 정렬 조건을 작성.
    • 쿼리를 실행해 결과를 확인하고 수정.

4. 코드작성

-- 3월에 태어난 여성 회원 목록을 출력하는 SQL
SELECT
    MEMBER_ID,                        -- 회원 ID
    MEMBER_NAME,                      -- 회원 이름
    GENDER,                           -- 성별
    DATE_FORMAT(DATE_OF_BIRTH, '%Y-%m-%d') AS DATE_OF_BIRTH  -- 생년월일을 'YYYY-MM-DD' 형식으로 변환
FROM
    MEMBER_PROFILE                    -- 데이터 조회 테이블
WHERE
    GENDER = 'W'                      -- 여성 회원만 조회
    AND MONTH(DATE_OF_BIRTH) = 3      -- 생일이 3월인 회원만 조회
    AND TLNO IS NOT NULL              -- 전화번호가 NULL이 아닌 데이터만 포함
ORDER BY
    MEMBER_ID ASC;                    -- 회원 ID 기준 오름차순 정렬

5. 코드분석

  1. SELECT 절
    • MEMBER_ID, MEMBER_NAME, GENDER, DATE_OF_BIRTH를 선택.
    • DATE_FORMAT(DATE_OF_BIRTH, '%Y-%m-%d')를 통해 날짜를 YYYY-MM-DD 형식으로 출력.
  2. FROM 절
    • 데이터는 MEMBER_PROFILE 테이블에서 가져온다.
  3. WHERE 절
    • GENDER = 'W': 성별이 W(여성)인 데이터 필터링.
    • MONTH(DATE_OF_BIRTH) = 3: 생일이 3월인 데이터만 선택.
    • TLNO IS NOT NULL: 전화번호가 NULL이 아닌 데이터만 포함.
  4. ORDER BY 절
    • 결과를 MEMBER_ID 기준으로 오름차순(ASC) 정렬.
  5. DATE_FORMAT 함수
    • DATE_OF_BIRTH를 읽기 쉬운 형식으로 변환.