👇 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은 인덱스 내의 정렬된 상태로 스캔하기 때문에 별도의 정렬 작업없이 결과를 반환할 수 있습니다.
'🗄️ DB_이야기 > # ⚡SQL' 카테고리의 다른 글
| 🚀[SQL 알고리즘 문제 풀이] Programmers : 강원도에 위치한 생산공장 목록 출력하기(SELECT) (0) | 2026.04.13 |
|---|---|
| 🚀[SQL 알고리즘 문제 풀이] Programmers : 조건에 부합하는 중고거래 댓글 조회하기(SELECT) (0) | 2026.04.13 |
| 🚀[SQL 알고리즘 문제 풀이] Programmers : 흉부외과 또는 일반외과 의사 목록 출력하기(SELECT) (0) | 2026.04.13 |
| 🚀[SQL 알고리즘 문제 풀이] Programmers : 조건에 맞는 도서 리스트 출력하기(SELECT) (0) | 2026.04.13 |
| 🚀[SQL 알고리즘 문제 풀이] Programmers : 과일로 만든 아이스크림 고르기(SELECT) (0) | 2026.04.13 |