취소되지 않은 진료 예약 조회하기
String, Date
취소되지 않은 진료 예약 조회하기
문제 설명
다음은 환자 정보를 담은 PATIENT 테이블, 의사 정보를 담은 DOCTOR 테이블, 그리고 진료 예약목록을 담은 APPOINTMENT 테이블입니다.
PATIENT 테이블
Column name | Type | Nullable | Description |
---|---|---|---|
PT_NO | VARCHAR(N) | FALSE | 환자번호 |
PT_NAME | VARCHAR(N) | FALSE | 환자이름 |
GEND_CD | VARCHAR(N) | FALSE | 성별코드 |
AGE | INTEGER | FALSE | 나이 |
TLNO | VARCHAR(N) | TRUE | 전화번호 |
DOCTOR 테이블
Column name | Type | Nullable | Description |
---|---|---|---|
DR_NAME | VARCHAR(N) | FALSE | 의사이름 |
DR_ID | VARCHAR(N) | FALSE | 의사ID |
LCNS_NO | VARCHAR(N) | FALSE | 면허번호 |
HIRE_YMD | DATE | FALSE | 고용일자 |
MCDP_CD | VARCHAR(N) | TRUE | 진료과코드 |
TLNO | VARCHAR(N) | TRUE | 전화번호 |
APPOINTMENT 테이블
Column name | Type | Nullable | Description |
---|---|---|---|
APNT_YMD | TIMESTAMP | FALSE | 진료 예약일시 |
APNT_NO | INTEGER | FALSE | 진료예약번호 |
PT_NO | VARCHAR(N) | FALSE | 환자번호 |
MCDP_CD | VARCHAR(N) | FALSE | 진료과코드 |
MDDR_ID | VARCHAR(N) | FALSE | 의사ID |
APNT_CNCL_YN | VARCHAR(N) | TRUE | 예약취소여부 |
APNT_CNCL_YMD | DATE | TRUE | 예약취소날짜 |
문제
PATIENT, DOCTOR, APPOINTMENT 테이블에서 2022년 4월 13일 취소되지 않은 흉부외과(CS) 진료 예약 내역을 조회하는 SQL문을 작성해주세요. 진료예약번호, 환자이름, 환자번호, 진료과코드, 의사이름, 진료예약일시 항목이 출력되도록 작성해주세요. 결과는 진료예약일시를 기준으로 오름차순 정렬해주세요.
풀이 과정
- JOIN을 통한 테이블 결합
- APPOINTMENT 테이블을 기준으로 PATIENT와 DOCTOR 테이블을 각각 PT_NO와 MDDR_ID를 기준으로 INNER JOIN
- 필터링 조건 적용
- 진료과코드(
MCDP_CD
)가 ‘CS’(흉부외과)이고 예약취소여부(APNT_CNCL_YN
)가 ‘N’(취소되지 않음)인 데이터 필터링 - 진료 예약일시(
APNT_YMD
)가 2022년 4월 13일인 경우 선택
- 진료과코드(
- 최종 데이터 선택 및 정렬
- SELECT 절에서
진료예약번호
,환자이름
,환자번호
,진료과코드
,의사이름
,진료예약일시
를 선택
- SELECT 절에서
- 결과 정렬
- 정렬 기준에 따라 ORDER BY로 결과 정렬
**APNT_YM**
기준으로 오름차순 정렬
- 정렬 기준에 따라 ORDER BY로 결과 정렬
- 교훈
- 여러 테이블에서 데이터를 결합할 때는 적절한 JOIN을 선택하고, 필터링 조건을 명확히 설정해야 원하는 결과를 정확히 얻을 수 있습니다.
정답
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SELECT
A.APNT_NO,
P.PT_NAME,
A.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.MCDP_CD = 'CS'
AND A.APNT_CNCL_YN = 'N'
AND DATE(A.APNT_YMD) = '2022-04-13'
ORDER BY
A.APNT_YMD;
Tip
DATE() 함수를 사용하여 TIMESTAMP에서 날짜만 추출하여 비교
개념 확인
- INNER JOIN
- 두 테이블 간의 공통된 데이터를 기준으로 결합
- DATE 함수
- TIMESTAMP에서 날짜만 추출하여 비교할 때 사용
ex) : **DATE(
APNT_YMD) = '2022-04-13'**
Useful link
This post is licensed under Park Juyoung by the author.