728x90
프로그래머스에서 제공하는 SQL문제 매일 풀기 챌린지
문제 설명
다음은 식당 리뷰 사이트의 회원 정보를 담은 MEMBER_PROFILE 테이블입니다. MEMBER_PROFILE 테이블은 다음과 같으며 MEMBER_ID, MEMBER_NAME, TLNO, GENDER, DATE_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
반응형
'SQL 문제 풀기 > 1. 프로그래머스 SQL : 2023.12.17~2024.2.29' 카테고리의 다른 글
<프로그래머스 45> 재구매가 일어난 상품과 회원 리스트 구하기(Lv.2) (2) | 2024.01.30 |
---|---|
<프로그래머스 44> 가격대 별 상품 개수 구하기(Lv.2) (2) | 2024.01.29 |
<프로그래머스 42> 루시와 엘라 찾기(Lv.2) (0) | 2024.01.27 |
<프로그래머스 41> 성분으로 구분한 아이스크림 총 주문량(Lv.2) (0) | 2024.01.26 |
<프로그래머스 40> 조건에 맞는 도서와 저자 리스트 출력하기(Lv.2) (2) | 2024.01.25 |