[MySQL] ํ๋ก๊ทธ๋๋จธ์ค - ์์๋๋ฐ์ ์์์ต๋๋ค(Lv. 3)
[ํ๋ก๊ทธ๋๋จธ์ค] ์์๋๋ฐ์ ์์์ต๋๋ค
๊ด๋ฆฌ์์ ์ค์๋ก ์ผ๋ถ ๋๋ฌผ์ ์ ์์ผ์ด ์๋ชป ์ ๋ ฅ๋์์ต๋๋ค. ๋ณดํธ ์์์ผ๋ณด๋ค ์ ์์ผ์ด ๋ ๋น ๋ฅธ ๋๋ฌผ์ ์์ด๋์ ์ด๋ฆ์ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ๊ฒฐ๊ณผ๋ ๋ณดํธ ์์์ผ์ด ๋น ๋ฅธ ์์ผ๋ก ์กฐํํด์ผํฉ๋๋ค.
ANIMAL_INS ํ ์ด๋ธ์ ๋๋ฌผ ๋ณดํธ์์ ๋ค์ด์จ ๋๋ฌผ์ ์ ๋ณด๋ฅผ ๋ด์ ํ ์ด๋ธ์ ๋๋ค. ANIMAL_INS ํ ์ด๋ธ ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ์ผ๋ฉฐ, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE๋ ๊ฐ๊ฐ ๋๋ฌผ์ ์์ด๋, ์๋ฌผ ์ข , ๋ณดํธ ์์์ผ, ๋ณดํธ ์์ ์ ์ํ, ์ด๋ฆ, ์ฑ๋ณ ๋ฐ ์ค์ฑํ ์ฌ๋ถ๋ฅผ ๋ํ๋ ๋๋ค.
NAME | TYPE | NULLABLE |
ANIMAL_ID | VARCHAR(N) | FALSE |
ANIMAL_TYPE | VARCHAR(N) | FALSE |
DATETIME | DATETIME | FALSE |
INTAKE_CONDITION | VARCHAR(N) | FALSE |
NAME | VARCHAR(N) | TRUE |
SEX_UPON_INTAKE | VARCHAR(N) | FALSE |
ANIMAL_OUTS ํ ์ด๋ธ์ ๋๋ฌผ ๋ณดํธ์์์ ์ ์ ๋ณด๋ธ ๋๋ฌผ์ ์ ๋ณด๋ฅผ ๋ด์ ํ ์ด๋ธ์ ๋๋ค. ANIMAL_OUTS ํ ์ด๋ธ ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ์ผ๋ฉฐ, ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME๋ ๊ฐ๊ฐ ๋๋ฌผ์ ์์ด๋, ์๋ฌผ ์ข , ์ ์์ผ, ์ด๋ฆ, ์ฑ๋ณ ๋ฐ ์ค์ฑํ ์ฌ๋ถ๋ฅผ ๋ํ๋ ๋๋ค. ANIMAL_OUTS ํ ์ด๋ธ์ ANIMAL_ID๋ ANIMAL_INS์ ANIMAL_ID์ ์ธ๋ ํค์ ๋๋ค.
NAME | TYPE | NULLABLE |
ANIMAL_ID | VARCHAR(N) | FALSE |
ANIMAL_TYPE | VARCHAR(N) | FALSE |
DATETIME | DATETIME | FALSE |
NAME | VARCHAR(N) | TRUE |
SEX_UPON_OUTCOME | VARCHAR(N) | FALSE |
์ฝ๋ฉ ๋ฌธ์ ์์๋ ํต์ฌ์ ํ์ ํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ค์ํ๋ฐ, SQL์ ๊ฒฝ์ฐ ๋ณดํต ํ ๋ฌธ์ฅ์ ๋ด๊ฒจ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
๋ณธ ๋ฌธ์ ์์ ๊ฐ์ฅ ํต์ฌ์ด ๋๋ ์ง๋ฌธ์, '๋ณดํธ ์์์ผ๋ณด๋ค ์ ์์ผ์ด ๋ ๋น ๋ฅธ ๋๋ฌผ์ ์์ด๋์ ์ด๋ฆ'์ด๋ค.
๋ ๋ ์ง๋ฅผ ๋น๊ตํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ๋์ถํด์ผ ํ๋ฏ๋ก, JOIN๊ณผ ๋น๊ต ์ฐ์ฐ์ ํจ๊ป ์คํํด์ผ ํจ์ ์ ์ถํ ์ ์๋ค.
๋จผ์ ๋ณดํธ์์ ๋ค์ด์จ ๋๋ฌผ ํ ์ด๋ธ(IN)๊ณผ ๋ณดํธ์์์ ์ ์ ๋ณด๋ธ ๋๋ฌผ ํ ์ด๋ธ(OUT)์ JOINํ๋ค.
์ด์ ๋ฌธ์ ์๋ ๋ฌ๋ฆฌ ๋ฐ์ดํฐ๊ฐ ์ ์ค๋(NULL) ๊ฒ์ด ์๋๋ผ, ๋ฐ์ดํฐ์ ๊ฐ์ด ์๋ชป๋ ๊ฒ์ด๋ฏ๋ก ์ผ๋ฐ JOIN์ ์ํํ๋ค.
[MySQL] ํ๋ก๊ทธ๋๋จธ์ค - ์์ด์ง ๊ธฐ๋ก ์ฐพ๊ธฐ(Lv. 3)
ANIMAL_INS ํ ์ด๋ธ์ ๋๋ฌผ ๋ณดํธ์์ ๋ค์ด์จ ๋๋ฌผ์ ์ ๋ณด๋ฅผ ๋ด์ ํ ์ด๋ธ์ ๋๋ค. ANIMAL_INS ํ ์ด๋ธ ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ์ผ๋ฉฐ, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE๋ ๊ฐ๊ฐ ๋๋ฌผ์ ์์ด๋
idox.tistory.com
์ฟผ๋ฆฌ๋ฌธ์ ์์ฑํ๊ธฐ ์ํด ํ์ํ ์ ์ฒด ์กฐ๊ฑด๋ค์ ๋ค์๊ณผ ๊ฐ๋ค.
- IN/OUT ํ ์ด๋ธ์ JOIN, (๊ฐ ๋๋ฌผ์ ๊ธฐ์ค์ผ๋ก ์ ์ถ์ ๋ ์ง๋ฅผ ์์์ผํ๋ฏ๋ก ID๋ฅผ ๊ธฐ์ค์ผ๋ก)
- IN/OUT DATETIME์ ๋น๊ต (๋ณดํธ ์์์ผ[IN]๋ณด๋ค ์ ์์ผ[OUT]์ด ๋ ๋น ๋ฅธ ๋๋ฌผ์ ์ฐพ๊ธฐ)
- ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ ID์ NAME
- IN DATETIME์ ๊ธฐ์ค์ผ๋ก ORDER BY
SQL ๋ฌธ์ ๋ ์์ฒ๋ผ ์กฐ๊ฑด์ ํ๋์ฉ ์ฒดํฌํ๋ฉด์ ์ฟผ๋ฆฌ๋ฌธ์ผ๋ก ์นํํ๋ฏ์ด ํ๋ฉด ๋น ๋ฅด๊ณ ์ ํํ๊ฒ ํ ์ ์๋ค.
-- ์ฝ๋๋ฅผ ์
๋ ฅํ์ธ์
SELECT INS.ANIMAL_ID, INS.NAME
FROM ANIMAL_INS INS JOIN ANIMAL_OUTS OUTS
ON INS.ANIMAL_ID=OUTS.ANIMAL_ID
WHERE INS.DATETIME > OUTS.DATETIME
ORDER BY INS.DATETIME