[프로그래머스 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: 그렇게 조회된 데이터를 정렬해준다.