코딩테스트_SQL
250428 프로그래머스 취소되지 않은 진료 예약 조회하기
jihye0e
2025. 4. 28. 19:19
[문제]
PATIENT, DOCTOR 그리고 APPOINTMENT 테이블에서 2022년 4월 13일 취소되지 않은 흉부외과(CS) 진료 예약 내역을 조회하는 SQL문을 작성해주세요. 진료예약번호, 환자이름, 환자번호, 진료과코드, 의사이름, 진료예약일시 항목이 출력되도록 작성해주세요. 결과는 진료예약일시를 기준으로 오름차순 정렬해주세요.
[풀이]
1) APNT_NO, PT_NAME, PT_NO, MCDP_CD, DR_NAME, APNT_YMD 조회
2) 진료예약(APPOINTMENT) 테이블 기준으로 PATIENT, DOCTOR 테이블과 각각 조인
3) APPOINTMENT 테이블의 진료예약내역은 'N', 진료예약일시는 2022년 4월 13일, 흉부외과 진료는 MCDP_CD 컬럼을 통해 'CS' 조건 걸기
- 이때, 진료예약일시는 데이터 형태를 바꿔서 찾아야 한다.
4) 진료예약일시 기준으로 오름차순 정렬
[오답 분석]
1) FROM절에서 JOIN
A 테이블
JOIN B 테이블 (조건)
JOIN C 테이블 (조건)
...
# A랑 B를 먼저 조인해서 하나로 묶고 그 결과에 다시 C를 조인
** 테이블을 여러 개 연결하기 위해서 JOIN 여러 번 쓸 수 있다.
[정답]
SELECT A.APNT_NO, P.PT_NAME, P.PT_NO, A.MCDP_CD,
D.DR_NAME, A.APNT_YMD
FROM APPOINTMENT A
JOIN PATIENT P ON A.PT_NO=P.PT_NO
JOIN DOCTOR D ON A.MDDR_ID=D.DR_ID
WHERE A.APNT_CNCL_YN = 'N'
AND DATE(A.APNT_YMD) = '2022-04-13'
AND A.MCDP_CD = 'CS'
ORDER BY A.APNT_YMD;