[프로그래머스 MySQL] 흉부외과 또는 일반외과 의사 목록 출력하기(feat. SQL 구문 순서 팁)
카테고리: Programmers-MySQL
💡 프로그래머스 스쿨에서 제공하는 MySQL 코딩 테스트 문제들을 풀고 정리했다.
Lv1. 흉부외과 또는 일반외과 의사 목록 출력하기
❓ 문제 설명
📝 나의 답
SELECT DR_NAME, DR_ID, MCDP_CD, DATE_FORMAT(HIRE_YMD, "%Y-%m-%d")
FROM DOCTOR
WHERE MCDP_CD = "CS" OR MCDP_CD = "GS"
ORDER BY HIRE_YMD DESC, DR_NAME;
💡 풀이 팁
가장 핵심이 되는 부분은 맨 밑 주의사항이다. 날짜 포맷이 YYYY-MM-DD 형식이어야 한다는 것이다. 날짜 포맷의 변경은 DATE_FORMAT
함수를 통해 가능하다.
형식 | 설명 |
---|---|
%Y | 년도 4자리 |
%y | 년도 2자리 |
%M | 월 영문 |
%m | 월 숫자 |
%D | 일 영문(1st, 2nd, 3rd…) |
%d, %e | 일 숫자 (01 ~ 31) |
%T | hh:mm:ss |
%r | hh:mm:ss AM/PM |
%H, %k | 시 (~23) |
%h, %l | 시 (~12) |
%i | 분 |
%S, %s | 초 |
%p | AM/PM |
추가로, SQL에 처음 입문 했을 때 WHERE
과 ORDER BY
가 같이 쓰일 때 순서가 헷갈렸다. SQL은 구문을 입력할 때의 순서와 처리 흐름의 순서가 다르다.
SELECT 컬럼명 -- 처리 순서 5번
FROM 테이블명 -- 처리 순서 1번
WHERE 테이블 조건 -- 처리 순서 2번
GROUP BY 컬럼명 -- 처리 순서 3번
HAVING 그룹 조건 -- 처리 순서 4번
ORDER BY 컬럼명 -- 처리 순서 6번
구문을 입력할 때는 위처럼 SELECT부터 ORDER BY의 순서대로 입력하면 되지만, 처리 순서는 주석에 달아놓은 순서를 따른다.
1) FROM
: 처리의 시작은 테이블을 불러오는 것부터 시작된다.
2) WHERE
: 불러온 테이블에서 조건에 맞는 데이터만 추린다.
3) GROUP BY
: 조건에 맞는 데이터들을 특정 컬럼을 기준으로 그룹화 시킨다.
4) HAVING
: WHRER이 모든 데이터를 기준으로 조건을 걸었다면, HAVING은 GROUP BY로 그룹화된 데이터를 기준으로 조건을 건다. 이 때 HAVING에 명시할 필드는 SELECT에도 반드시 명시되어야 한다.
5) SELECT
: 1~4의 과정을 거쳐 추출된 데이터를 조회한다.
6) ORDER BY
: 그렇게 조회된 데이터를 정렬해준다.