๋ฌธ์
๐ MySQL ๋ก ํ์ด
๐ ๋ฌธ์ ๋งํฌ :
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
๐ ๋ฌธ์ ์ค๋ช :
PATIENT, DOCTOR ๊ทธ๋ฆฌ๊ณ APPOINTMENT ํ ์ด๋ธ์์ 2022๋ 4์ 13์ผ ์ทจ์๋์ง ์์ ํ๋ถ์ธ๊ณผ(CS) ์ง๋ฃ ์์ฝ ๋ด์ญ์ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ง๋ฃ์์ฝ๋ฒํธ, ํ์์ด๋ฆ, ํ์๋ฒํธ, ์ง๋ฃ๊ณผ์ฝ๋, ์์ฌ์ด๋ฆ, ์ง๋ฃ์์ฝ์ผ์ ํญ๋ชฉ์ด ์ถ๋ ฅ๋๋๋ก ์์ฑํด์ฃผ์ธ์. ๊ฒฐ๊ณผ๋ ์ง๋ฃ์์ฝ์ผ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์.
๐ ํ ์ด๋ธ :
๋ค์์ ํ์ ์ ๋ณด๋ฅผ ๋ด์ PATIENT ํ ์ด๋ธ๊ณผ ์์ฌ ์ ๋ณด๋ฅผ ๋ด์ DOCTOR ํ ์ด๋ธ, ๊ทธ๋ฆฌ๊ณ ์ง๋ฃ ์์ฝ๋ชฉ๋ก์ ๋ด์ APPOINTMENT์ ๋ํ ํ ์ด๋ธ์ ๋๋ค. PATIENT ํ ์ด๋ธ์ ๋ค์๊ณผ ๊ฐ์ผ๋ฉฐ PT_NO, PT_NAME, GEND_CD, AGE, TLNO๋ ๊ฐ๊ฐ ํ์๋ฒํธ, ํ์์ด๋ฆ, ์ฑ๋ณ์ฝ๋, ๋์ด, ์ ํ๋ฒํธ๋ฅผ ์๋ฏธํฉ๋๋ค.
| PT_NO | VARCHAR(N) | FALSE |
| PT_NAME | VARCHAR(N) | FALSE |
| GEND_CD | VARCHAR(N) | FALSE |
| AGE | INTEGER | FALSE |
| TLNO | VARCHAR(N) | TRUE |
DOCTOR ํ ์ด๋ธ์ ๋ค์๊ณผ ๊ฐ์ผ๋ฉฐ DR_NAME, DR_ID, LCNS_NO, HIRE_YMD, MCDP_CD, TLNO๋ ๊ฐ๊ฐ ์์ฌ์ด๋ฆ, ์์ฌID, ๋ฉดํ๋ฒํธ, ๊ณ ์ฉ์ผ์, ์ง๋ฃ๊ณผ์ฝ๋, ์ ํ๋ฒํธ๋ฅผ ๋ํ๋ ๋๋ค.
| DR_NAME | VARCHAR(N) | FALSE |
| DR_ID | VARCHAR(N) | FALSE |
| LCNS_NO | VARCHAR(N) | FALSE |
| HIRE_YMD | DATE | FALSE |
| MCDP_CD | VARCHAR(N) | TRUE |
| TLNO | VARCHAR(N) | TRUE |
APPOINTMENT ํ ์ด๋ธ์ ๋ค์๊ณผ ๊ฐ์ผ๋ฉฐ APNT_YMD, APNT_NO, PT_NO, MCDP_CD, MDDR_ID, APNT_CNCL_YN, APNT_CNCL_YMD๋ ๊ฐ๊ฐ ์ง๋ฃ ์์ฝ์ผ์, ์ง๋ฃ์์ฝ๋ฒํธ, ํ์๋ฒํธ, ์ง๋ฃ๊ณผ์ฝ๋, ์์ฌID, ์์ฝ์ทจ์์ฌ๋ถ, ์์ฝ์ทจ์๋ ์ง๋ฅผ ๋ํ๋ ๋๋ค.
| APNT_YMD | TIMESTAMP | FALSE |
| APNT_NO | INTEGER | FALSE |
| PT_NO | VARCHAR(N) | FALSE |
| MCDP_CD | VARCHAR(N) | FALSE |
| MDDR_ID | VARCHAR(N) | FALSE |
| APNT_CNCL_YN | VARCHAR(N) | TRUE |
| APNT_CNCL_YMD | DATE | TRUE |
ํ์ด
์ถ์ธก)
์์ฝ ๊ธฐ์ค์ผ๋ก ํด์ ์์ฌ๋ ํ์๋ INNER JOINํด์ฃผ๋ฉด ๋ ๋ฏํ๋ค.
์ผ๋จ ์์ฝ์์ ํด๋น ์กฐ๊ฑด์ด๋ ์๋ง๋๊ฑฐ ๋จผ์ row์ ๋นผ์ฃผ๊ณ innerํ๋ ๊ฒ ๋ ์ข์ ๊ฑฐ ๊ฐ์์ ์์ฝ๋ง ์กฐ๊ฑด ์ถ๋ ฅํ๊ณ
ํด๋นํ๋ ์์ฌ, ํ์ ๋งค์นญ๋๊ฒ ๊ฐ๊ฐ inner join ํด์ฃผ๋ฉด ๋ ๋ฏํ๋ค.
์ฟผ๋ฆฌ)
* 1์ฐจ) ์ฑ๊ณต
SELECT AP.APNT_NO, AP.PT_NAME, AP.PT_NO, AP.MCDP_CD, D.DR_NAME, AP.APNT_YMD
FROM
(SELECT A.APNT_NO, P.PT_NAME, P.PT_NO, A.MCDP_CD, A.MDDR_ID, A.APNT_YMD
FROM (SELECT APNT_NO, PT_NO, MCDP_CD, MDDR_ID, APNT_YMD
FROM APPOINTMENT
WHERE APNT_YMD LIKE '2022-04-13%'
AND MCDP_CD = 'CS'
AND APNT_CNCL_YN != 'Y'
) AS A # ํ์์๋ ์์ฝ ๋จผ์ ํํฐ๋ง
INNER JOIN PATIENT AS P
ON A.PT_NO = P.PT_NO) AS AP
INNER JOIN DOCTOR AS D
ON AP.MDDR_ID = D.DR_ID
ORDER BY
* 2์ฐจ) ์ฑ๊ณต: ์์ ๊บผ๊ฐ ๋๋ฌด ์ง์ ๋ถํด์ ์ข ์ ๋ฆฌ
SELECT A.APNT_NO, P.PT_NAME, P.PT_NO, A.MCDP_CD, D.DR_NAME, A.APNT_YMD
FROM (SELECT APNT_NO, PT_NO, MCDP_CD, MDDR_ID, APNT_YMD
FROM APPOINTMENT
WHERE APNT_YMD LIKE '2022-04-13%'
AND MCDP_CD = 'CS'
AND APNT_CNCL_YN != 'Y'
) AS A # ํ์์๋ ์์ฝ ๋จผ์ ํํฐ๋ง
INNER JOIN PATIENT AS P ON A.PT_NO = P.PT_NO
INNER JOIN DOCTOR AS D ON A.MDDR_ID = D.DR_ID
ORDER BY A.APNT_YMD ASC
๋ฆฌ๋ทฐ)
์ฟผ๋ฆฌ๋ ์ข๋ ๊น๋ํ๊ฒ ์ธ ์ ์๋ ๋ฒ์ ๋ง์ด ์๊ฐํด๋ด์ผํ ๊ฑฐ ๊ฐ๋ค
1์ฐจ ์ฟผ๋ฆฌ ๋๋ฌด ์ง์ ๋ถํ์ ใ ใ ..
