🤔 문제
다음은 식당 리뷰 사이트의 회원 정보를 담은 MEMBER_PROFILE
테이블입니다. MEMBER_PROFILE
테이블은 다음과 같으며 MEMBER_ID
, MEMBER_NAME
, TLNO
, GENDER
, DATE_OF_BIRTH
는 회원 ID, 회원 이름, 회원 연락처, 성별, 생년월일을 의미합니다.
MEMBER_PROFILE
테이블에서 생일이 3월인 여성 회원의 ID, 이름, 성별, 생년월일을 조회하는 SQL문을 작성해주세요. 이때 전화번호가 NULL인 경우는 출력대상에서 제외시켜 주시고, 결과는 회원ID를 기준으로 오름차순 정렬해주세요.
예시
`MEMBER_PROFILE' 테이블이 다음과 같을 때
SQL을 실행하면 다음과 같이 출력되어야 합니다.
주의사항
`DATE_OF_BIRTH`의 데이터 포맷이 예시와 동일해야 정답처리 됩니다.
💻나의 풀이
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) = 3
AND TLNO IS NOT NULL
AND GENDER = 'W'
ORDER BY MEMBER_ID;
결과

✅ 핵심 정리
1. SQL 기본 구조와 순서
SELECT DISTINCT 컬럼명 AS 별칭
FROM 테이블명
WHERE 테이블조건
GROUP BY 컬럼명
HAVING 그룹조건
ORDER BY 컬럼명 ASC/DESC
LIMIT 가져올 갯수;
- `FROM` : 작업할 테이블을 확인한다.
- `WHERE` : 조건에 맞는 데이터들을 추출한다.
- `GROUP BY` : 조건에 맞는 데이터 안에서 공통적인 데이터들끼리 묶어 그룹을 만들어준다.
- `HAVING` : `GROUP BY`까지 거친 그룹 중, 조건에 맞는 그룹들을 추출한다.
- `SELECT` : 최종적으로 원하는 데이터를 가져온다.
- `*` : 테이블의 모든 컬럼을 뜻한다.
- `DISTINCT` : 중복된 값들을 제거한다.
- `AS` : 추출할 컬럼을 원하는 별칭(Alias)로 변경한다. (한글은 ''안에 적어준다.)
- `ORDER BY` : 추출된 데이터를 정렬한다.
(※ `SELECT` 다음으로 오는 구문은 `ORDER BY`뿐이기 때문에, `SELECT`에서 지정한 별칭(Alias)은 `ORDER BY`에서만 사용 가능하다.)- `ASC` : 오름차순 정렬 (디폴트 값 → 생략 O)
- `DESC` : 내림차순 정렬
- `LIMIT` : 원하는 갯수만큼 데이터를 가져온다.
- ` LIMIT 가져올갯수`
- ` LIMIT 건너뛸갯수, 가져올갯수`
2. 날짜/시간 데이터
2-1. 원하는 데이터 포맷으로 지정하기
SELECT DATE_FORMAT(컬럼명, format)
FROM 테이블명;
예제를 풀어보자.
`datetime`이 2023-06-22 14:11:56 일 때,
예제1. 시간빼고 날짜만 나타내야 하는 경우
SELECT DATE_FORMAT(datetime, '%Y-%m-%d')
→ 2023-06-22
예제2. 12시간제로 시간만 나타내야 하는 경우
SELECT DATE_FORMAT(datetime, '%h:%i:%s')
→ 02:11:56
2-2. 원하는 부분만 추출하기
① `YEAR` : '연도' 추출하기
SELECT YEAR('2023-06-22 01:35:11')
→ 2023
② `MONTH` : '월' 추출하기
SELECT MONTH('2023-06-22 01:35:11')
→ 6
③ `MONTHNAME` : '월(영문)' 추출하기
SELECT MONTHNAME('2023-06-22 01:35:11')
→ June
④ `DAY`, `DAYOFMONTH` : '일' 추출하기
SELECT DAY('2023-06-22 01:35:11')
→ 22
⑤ `WEEKDAY` : '요일값(월요일 : 0)' 추출하기
SELECT WEEKDAY('2023-06-22 01:35:11')
→ 3
⑥ `DAYNAME` : '요일명(영문)' 추출하기
SELECT DAYNAME('2023-06-22 01:35:11')
→ Thursday
⑦ `HOUR` : '시' 추출하기
SELECT HOUR('2023-06-22 01:35:11')
→ 1
⑧ `MINUTE` : '분' 추출하기
SELECT MINUTE('2023-06-22 01:35:11')
→ 35
⑨ `SECOND` : '초' 추출하기
SELECT SECOND('2023-06-22 01:35:11')
→ 11
3. NULL인 값/NULL이 아닌 값만 추출하기
3-1. 컬럼의 값이 NULL인 경우만 추출
방법 1) `is null`
SELECT 컬럼명
FROM 테이블명
WHERE 컬럼명 is null;
방법 2) `null을 ''으로 취급할 때`
SELECT 컬럼명
FROM 테이블명
WHERE 컬럼명 = '';
방법 3) `length()`함수 활용
SELECT 컬럼명
FROM 테이블명
WHERE length(컬럼명) = 0;
3-2. 컬럼의 값이 NULL이 아닌 경우만 추출
방법 1) `is not null`
SELECT 컬럼명
FROM 테이블명
WHERE 컬럼명 is not null;
방법 2) `null을 ''으로 취급할 때`
SELECT 컬럼명
FROM 테이블명
WHERE 컬럼명 != '';
방법 3) `length()`함수 활용
SELECT 컬럼명
FROM 테이블명
WHERE length(컬럼명) >= 1;
🔗 References
[얄코의 갖고 노는 MySQL 데이터베이스 강좌]
https://www.yalco.kr/@sql/1-1/
SELECT 전반 기능 훑어보기
어려운 프로그래밍 개념들을 쉽게 설명해주는 유튜브 채널 '얄팍한 코딩사전'. 영상에서 다 알려주지 못한 정보들이나 자주 묻는 질문들의 답변들, 예제 코드들을 얄코에서 확인하세요!
www.yalco.kr
[DATE_FORMAT Specifier]
https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_date-format
MySQL :: MySQL 5.7 Reference Manual :: 12.7 Date and Time Functions
12.7 Date and Time Functions This section describes the functions that can be used to manipulate temporal values. See Section 11.2, “Date and Time Data Types”, for a description of the range of values each date and time type has and the valid formats
dev.mysql.com
[null 포함/제외 하는 방법 참고]
NULL 혹은 빈 문자열 제외 하는 방법들 ( 함수 / LENGTH )
종종 데이터를 처리할 때 null을 제외한 값, 빈 문자열을 제외한 값 혹은 null 값만, 빈 문자열 값만 불러와야 할 때가 있다. 일반적으로, 우리가 아는 그 방법으로 하면 된다. 하지만 종종 어떤 DB를
sromi.tistory.com
'취업준비 > 코딩테스트 문제 풀이' 카테고리의 다른 글
[프로그래머스 SQL 고득점 Kit] SELECT - 평균 일일 대여 요금 구하기 (0) | 2024.03.27 |
---|---|
[프로그래머스 SQL 고득점 Kit] SELECT - 흉부외과 또는 일반외과 의사 목록 출력하기 (1) | 2024.03.26 |
[Baekjoon] 백준 10816. 숫자 카드 2 (1) | 2023.12.24 |
[Baekjoon] 백준 1158. 요세푸스 문제 (0) | 2023.12.15 |
[Baekjoon] 백준 10828. 스택 (0) | 2023.12.12 |