본문 바로가기
🗄️ DB_이야기/# ⚡SQL

🚀[SQL 알고리즘 문제 풀이] Programmers : 3월에 태어난 여성 회원 목록 출력하기(SELECT)

by gwon_s 2026. 4. 13.

👇 3월에 태어난 여성 회원 목록 출력하기

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

🔓 문제 설명

MEMBER_PROFILE 테이블에서 생일이 3월인 여성 회원의 ID, 이름, 성별, 생년월일을 조회하는 SQL문을 작성해주세요. 

이때 전화번호가 NULL인 경우는 출력대상에서 제외시켜 주시고,

결과는 회원ID를 기준으로 오름차순 정렬해주세요.

 

예시 문제 데이터(MEMBER_PROFILE)

MEMBER_ID MEMBER_NAME TLNO GENDER DATE_OF_BIRTH
jiho92@naver.com 이지호 01076432111 W 1992-02-12
seoyeons@naver.com 박서연 01076482209 W 1993-03-16
yoonsy94@gmail.com 윤서연 NULL W 1994-03-19

⚡SQL Query

SELECT MEMBER_ID, MEMBER_NAME, GENDER, TO_CHAR(DATE_OF_BIRTH, 'YYYY-MM-DD') AS DATE_OF_BIRTH
FROM MEMBER_PROFILE
WHERE GENDER = 'W'
  AND TO_CHAR(DATE_OF_BIRTH, 'MM') = '03'
  AND TLNO IS NOT NULL
ORDER BY MEMBER_ID ASC;

🔎 풀이 설명

1. 월별 필터링: TO_CHAR(DATE_OF_BIRTH, 'MM')을 사용하여 생년월일 중 월 단위 데이터만 추출했습니다.

2. 성별 및 NULL 제외


💡인사이트

1. 함수 기반 인덱스(FBI)

  • 위 쿼리처럼 WHERE TO_CHAR(DATE_OF_BIRTH, 'MM') = '03' 과 같이 컬럼을 가공하면 일반적인 인덱스는 사용할 수 없고, TO_CHAR(DATE_OF_BIRTH, 'MM') 자체를 인덱스로 만드는 함수 기반 인덱스를 고려해야 합니다. 

 

2. IS NOT NULL의 성능

  • 대부분의 인덱스는 NULL 정보를 저장하지 않습니다.
  • IS NOT NULL 조건은 해당 컬럼에 인덱스가 있다면 Index Full Scan 등을 통해 NULL이 아닌 로우를 빠르게 걸러내는 용도로 사용될 수 있습니다.

 

3. 결합 인덱스 구성

  • 위 쿼리에서 최적화된 인덱스는 [MCDP_CD + HIRE_YMD DESC + DR_NAME] 순서 입니다.
  • MCDP_CD를 조건에 맞게 먼저 필터링 한 후, HIRE_YMD DR_NAME은 인덱스 내의 정렬된 상태로 스캔하기 때문에 별도의 정렬 작업없이 결과를 반환할 수 있습니다.