1 분 소요

프로그래머스 사이트 링크

문제

image

image

image


코드

ver(1)

-- 환자(PATIENT) 테이블, 예약(APPOINTMENT) 테이블, 의사(DOCTOR) 테이블을 이용하여 데이터를 가져오는 부분
SELECT A.APNT_NO, P.PT_NAME, P.PT_NO, D.MCDP_CD, D.DR_NAME, A.APNT_YMD
FROM PATIENT AS P, APPOINTMENT AS A, DOCTOR AS D

-- 조건절: 예약 번호, 환자 이름, 환자 번호, 진료과목 코드, 의사 이름, 예약 날짜를 선택
WHERE A.PT_NO = P.PT_NO  -- 예약의 환자 번호와 환자 테이블의 환자 번호가 일치해야 함
  AND D.DR_ID = A.MDDR_ID  -- 의사 ID와 예약의 의사 ID가 일치해야 함
  AND (A.APNT_CNCL_YN = 'N'  -- 예약이 취소되지 않은 경우
       AND A.APNT_YMD LIKE "2022-04-13%"  -- 2022년 4월 13일에 해당하는 예약 날짜
       AND A.MCDP_CD = 'CS')  -- 진료과목 코드가 'CS'인 경우

-- 결과를 예약 날짜 순으로 정렬
ORDER BY A.APNT_YMD;

ver(2)

-- APPOINTMENT 테이블로부터 APNT_NO, MCDP_CD, APNT_YMD 컬럼을 선택합니다.
-- APPOINTMENT 테이블을 A 별칭으로 지정합니다.
-- 이때, 예약 취소 여부가 'N'이고, 의사와 환자 정보가 모두 있는 데이터를 검색합니다.
SELECT A.APNT_NO, A.MCDP_CD, A.APNT_YMD,

-- PATIENT 테이블로부터 PT_NAME, PT_NO 컬럼을 선택합니다.
-- PATIENT 테이블을 P 별칭으로 지정합니다.
-- 이때, 환자 정보가 있는 경우에만 해당 데이터를 검색합니다.
       P.PT_NAME, P.PT_NO,

-- DOCTOR 테이블로부터 DR_NAME, DR_ID 컬럼을 선택합니다.
-- DOCTOR 테이블을 D 별칭으로 지정합니다.
-- 이때, 의사 정보가 있는 경우에만 해당 데이터를 검색합니다.
       D.DR_NAME, D.DR_ID

-- APPOINTMENT 테이블(A)과 DOCTOR 테이블(D)을 MDDR_ID를 조인 조건으로 LEFT JOIN합니다.
LEFT JOIN DOCTOR AS D
ON A.MDDR_ID = D.DR_ID

-- APPOINTMENT 테이블(A)과 PATIENT 테이블(P)를 PT_NO를 조인 조건으로 LEFT JOIN합니다.
LEFT JOIN PATIENT AS P
ON A.PT_NO = P.PT_NO

-- 조건을 설정합니다.
-- 의사 정보(DR_ID)와 환자 정보(PT_NO)가 NULL이 아니고,
-- APNT_YMD가 '2022-04-13'로 시작하며, MCDP_CD가 'CS'(Consultation)이고, APNT_CNCL_YN이 'N'(예약 취소 안 함)인 데이터를 검색합니다.
WHERE D.DR_ID IS NOT NULL 
  AND P.PT_NO IS NOT NULL 
  AND A.APNT_YMD LIKE '2022-04-13%' 
  AND A.MCDP_CD = 'CS' 
  AND A.APNT_CNCL_YN = 'N'

-- 결과를 APNT_YMD(예약일자)를 기준으로 오름차순으로 정렬합니다.
ORDER BY A.APNT_YMD ASC;

댓글남기기