SQL/MY SQL 문제 풀이(프로그래머스)

[MYSQL] PROGRAMMERS_취소되지 않은 진료 예약 조회하기

SQL공부 2024. 2. 23. 19:50
반응형

SELECT a.APNT_NO, PT_NAME, a.PT_NO, a.MCDP_CD, DR_NAME, a.APNT_YMD
FROM PATIENT as p ,DOCTOR as d, APPOINTMENT as a
WHERE a.MDDR_ID = d.DR_ID
AND a.PT_NO = p.PT_NO
AND a.MCDP_CD = "CS"
AND APNT_YMD like "2022-04-13%" 
AND APNT_CNCL_YN = "N"
ORDER BY APNT_YMD

문제

PATIENT, DOCTOR 그리고 APPOINTMENT 테이블에서 2022년 4월 13일 취소되지 않은 흉부외과(CS) 진료 예약 내역을 조회하는 SQL문을 작성해주세요. 진료예약번호, 환자이름, 환자번호, 진료과코드, 의사이름, 진료예약일시 항목이 출력되도록 작성

 

 

 이번 문제는 테이블이 3개가 존재한다. 그래서 3개의 테이블을 어떻게 연결하여 사용 할 것인지 고민이 필요하다.

보통 이런경우에는 left 조인을 통해서 해결하는게 정석적인 방법이다. PATIENT테이블과 DOCTOR 테이블에 없는값이 APPOINTMENT에 없는경우에도 값을 뽑아 내기 위해서 인데 현재 문제에서는 그럴 필요 없어 간단하게 INNER JOIN으로 처리했다.

테이블을 조인하려면 어떤 값을 조인 해야되나 확인해야하는데 위 그림을 보면 이해하기 쉽다. APPOINTMENT 내의 환자 ID와 의사 ID를 가지고 PATIENT ,DOCTOR 테이블에 있는 각각의 환자, 의사 정보를 JOIN 하여 매칭 하는 것이다. 따라서 PT_NO와 MDDR_ID 를 사용하여 조인해 주었다.

그후 나머지 조건인 진료과 코드(MCDP_CD)가  흉부외과 (CS) 를 필터링, 예약일(APNT_YMD)이 2022-04-13일 대상을 필터링 (2022-04-13%를 하는 이유는 뒤에 시간도 같이 조건에 붙어있기 때문이다), 그리고 예약취소 여부(APNT_CNCL_YN) 를 마지막 필터링으로 하여 SELECT값은 APPOINTMENT 테이블 기준으로 출력해주면 된다. 

반응형