CODING TEST/MySQL

Lv1 - 흉부외과 or 일반외과 의사 목록 출력하기

iamyuunzo 2025. 7. 15. 21:20

📌 문제 정보

- 문제 이름 : 프로그래머스 - (SELECT) 흉부외과 or 일반외과 의사 목록 출력하기

- 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/132203

 

 

📌 문제 요약

- DOCTOR 테이블 : DR_NAME(의사이름), DR_ID(의사ID), LCNS_NO(면허번호), HIRE_YMD(고용일자), MCDP_CD(진료과코드), TLNO(전화번호)

- DOCTOR 테이블에서 진료과가 흉부외과(CS)이거나 일반외과(GS)인 의사의 이름, 의사ID, 진료과, 고용일자를 조회하는 SQL문을 작성. 이때 결과는 고용일자를 기준으로 내림차순 정렬하고, 고용일자가 같다면 이름을 기준으로 오름차순 정렬

 

예시) DOCTOR 테이블이 다음과 같을 때 

DR_NAME DR_ID LCNS_NO HIRE_YMD MCDP_CD TLNO
루피 DR20090029 LC00010001 2009-03-01 CS 01085482011
패티 DR20090001 LC00010901 2009-07-01 CS 01085220122
뽀로로 DR20170123 LC00091201 2017-03-01 GS 01034969210
티거 DR20100011 LC00011201 2010-03-01 NP 01034229818
품바 DR20090231 LC00011302 2015-11-01 OS 01049840278
티몬 DR20090112 LC00011162 2010-03-01 FM 01094622190
니모 DR20200012 LC00911162 2020-03-01 CS 01089483921
오로라 DR20100031 LC00010327 2010-11-01 OS 01098428957
자스민 DR20100032 LC00010192 2010-03-01 GS 01023981922
DR20100039 LC00010562 2010-07-01 GS 01058390758

 

출력)

DR_NAME DR_ID MCDP_CD HIRE_YMD
니모 DR20200012 CS 2020-03-01
뽀로로 DR20170123 GS 2017-03-01
DR20100039 GS 2010-07-01
자스민 DR20100032 GS 2010-03-01
패티 DR20090001 CS 2009-07-01
루피 DR20090029 CS 2009-03-01

 

 

 

📌 내 풀이 및 코드

#의사의 이름, 의사ID, 진료과, 고용일자를 조회
SELECT DR_NAME, DR_ID, MCDP_CD, DATE_FORMAT(HIRE_YMD, '%Y-%m-%d') AS HIRE_YMD
FROM DOCTOR 							# DOCTOR 테이블에서
WHERE MCDP_CD IN ('CS', 'GS')			# 의사 이름이 흉부외과(CS)이거나 일반외과(GS)인
ORDER BY HIRE_YMD DESC, DR_NAME ASC;	# 고용일자를 기준 내림차순 정렬, 고용일자가 같다면 이름 기준 오름차순

 



📌 새로 배운 문법

<-- 이번 문제에서 새로 배운 Java 문법 정리 -->

** IN 연산 **

- 해당 열의 값이 지정된 여러 값 중 하나와 일치하는지를 확인할 때, 조건절에 사용

컬럼명 IN (값1, 값2, 값3, ...)

## 예시
WHERE MCDP_CD IN ('CS', 'GS')

## 동일 조건을 OR로 쓰면?
WHERE MCDP_CD = 'CS' OR MCDP_CD = 'GS'

 

** DATE_FORMAT **

- 날짜값을 원하는 형식의 문자열로 바꿔주는 함수로 MySQL에서 주로 사용됨.

DATE_FORMAT(날짜컬럼, '형식')

## 예시
DATE_FORMAT(HIRE_YMD, '%Y-%m-%d') AS HIRE_YMD
형식  코드 의미 예시
%Y 연도 (4자리) 2025
%y 연도 (2자리) 25
%m 월 (2자리) 07
%d 일 (2자리) 15