본문 바로가기
SQL 문제 풀기/1. 프로그래머스 SQL : 2023.12.17~2024.2.29

<프로그래머스 43> 3월에 태어난 여성 회원 목록 출력하기(Lv.2)

by HYEHYE_SON 2024. 1. 28.
728x90

 

프로그래머스에서 제공하는 SQL문제 매일 풀기 챌린지


 

문제 설명

다음은 식당 리뷰 사이트의 회원 정보를 담은 MEMBER_PROFILE 테이블입니다. MEMBER_PROFILE 테이블은 다음과 같으며 MEMBER_IDMEMBER_NAMETLNOGENDERDATE_OF_BIRTH는 회원 ID, 회원 이름, 회원 연락처, 성별, 생년월일을 의미합니다.

 

Column name Type Nullable
MEMBER_ID VARCHAR(100) FALSE
MEMBER_NAME VARCHAR(50) FALSE
TLNO VARCHAR(50) TRUE
GENDER VARCHAR(1) TRUE
DATE_OF_BIRTH DATE TRUE

 


문제

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
jiyoon22@hotmail.com 김지윤 01032324117 W 1992-02-22
jihoon93@hanmail.net 김지훈 01023258688 M 1993-02-23
seoyeons@naver.com 박서연 01076482209 W 1993-03-16
yoonsy94@gmail.com 윤서연 NULL W 1994-03-19

 

SQL을 실행하면 다음과 같이 출력되어야 합니다.

MEMBER_ID MEMBER_NAME GENDER DATE_OF_BIRTH
seoyeons@naver.com 박서연 W 1993-03-16

 

주의사항

DATE_OF_BIRTH의 데이트 포맷이 예시와 동일해야 정답처리 됩니다.


1. 오라클 정답

select member_id, member_name, gender, to_char(date_of_birth, 'RRRR-MM-DD') as DATE_OF_BIRTH
    from member_profile
    where to_char(date_of_birth, 'MM') = '03'
    and gender = 'W'
    and tlno is not null
    order by member_id asc;

 

해설해보기

# 1. SELECT절
출력할 데이터들의 컬럼명을 나열해주는데, 
DATE_OF_BIRTH의 경우 데이터 포맷이 예시와 동일하게 
시간(시간:분:초)은 제외하고 출력되어야 한다.

따라서 TO_CHAR() 함수를 사용하여 형식을 변경해준다.

     TO_CHAR([컬럼명], '변경할 데이터 형태')
   위의 함수를 사용해서 날짜형 데이터 형식을 → 문자형 데이터 형식으로 변환한다.

   * 표시한 형태 해석(오라클의 경우 대소문자 구분 없음)
   - RRRR/YYYY : Year 연도 4자리로 표기(ex. 2023, 2024)
   - MM : Month 월 2자리로 표기 (ex. 05, 07)
   - DD : Day 일 2자리로 표기 (ex. 01, 31)


# 2. FROM절
데이터들을 가져올 테이블 명을 기입한다.


# 3. WHERE절 (조건1)
 
 where to_char(date_of_birth, 'MM') = '03'

생일이 3월인 회원을 추출하기 위해서 
TO_CHAR함수를 사용하여 월을 추출하였다.

    
# 4. WHERE절 (조건2)

and gender = 'W'

성별이 여자(w) 인 회원의 정보만
추출하기 위해서 조건을 걸어준다.


# 5. WHERE절 (조건3)

and tlno is not null

전화번호가 NULL인 경우를 출력하지 않기 위해
IS NOT NULL 조건을 사용해준다.

- NULL의 경우에는 등호와 함께 사용하지 않고
IS NULL 혹은 IS NOT NULL을 사용한다.

# 6. ORDER BY 절
회원 ID를 기준으로 오름차순 정렬(ASC) 해준다.
 

 


 

2. MySQL 정답

select member_id, member_name, gender, date_format(date_of_birth, '%Y-%m-%d') as DATE_OF_BIRTH
    from member_profile
    where month(date_of_birth) = '03'
    and gender = 'W'
    and tlno is not null
    order by member_id asc;

 

해설해보기

# 1. SELECT절
출력할 데이터들의 컬럼명을 나열해주는데, 
DATE_OF_BIRTH의 경우 데이터 포맷이 예시와 동일하게 
시간(시간:분:초)은 제외하고 출력되어야 한다.

따라서  날짜형식의 포맷을 지정해 주는 
DATE_FORMAT() 함수를 사용하여 형식을 변경해준다.


    DATE_FORMATE([컬럼명], '변경할 데이터 형태' ) 함수

   * 표시한 형태 해석(대소문자 구분 있음)
   - %Y : Year 연도를 4자리로 표기 (ex. 2023, 2024)
   - %m : Month 월을 2자리로 표기(ex. 05, 12)
   - %d : Day 일을 두 자리로 표기(ex. 04, 28)

* 참고
   - %c :Month 월을 한 자리로 표기(ex. 5, 12) 
   - %e :Day 일을 한자리로 표기(ex. 4, 28)



# 2. FROM절
데이터들을 가져올 테이블 명을 기입한다.


# 3. WHERE절 (조건1)

 where month(date_of_birth) = '03'

생일이 3월인 회원을 추출하기 위해서 
month( [컬럼명] ) 함수를 사용하여 월을 추출하였다.


# 4. WHERE절 (조건2)

and gender = 'W'

성별이 여자(w) 인 회원의 정보만
추출하기 위해서조건을 걸어준다.


# 5. WHERE절 (조건3)

and tlno is not null

전화번호가 NULL인 경우를 출력하지 않기 위해
IS NOT NULL 조건을 사용해준다.

- NULL의 경우에는 등호와 함께 사용하지 않고
IS NULL 혹은 IS NOT NULL을 사용한다.

# 6. ORDER BY 절
회원 ID를 기준으로 오름차순 정렬(ASC) 해준다.

 

 

 

 

 

출처 : 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges

반응형