[ํ๋ก๊ทธ๋๋จธ์ค] ์์ด์ง ๊ธฐ๋ก ์ฐพ๊ธฐ
์ฒ์ฌ์ง๋ณ์ผ๋ก ์ธํด ์ผ๋ถ ๋ฐ์ดํฐ๊ฐ ์ ์ค๋์์ต๋๋ค. ์ ์์ ๊ฐ ๊ธฐ๋ก์ ์๋๋ฐ, ๋ณดํธ์์ ๋ค์ด์จ ๊ธฐ๋ก์ด ์๋ ๋๋ฌผ์ ID์ ์ด๋ฆ์ ID ์์ผ๋ก ์กฐํํ๋ 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 |
๋ณดํต ์ฝ๋ฉ ๋ฌธ์ ๋ฅผ ํ ๋๋ ์์ด๋์ด๋ฅผ ๋ ์ฌ๋ฆฌ๋ ๋ฐ์์ ๊ฐ์ฅ ์๊ฐ์ ๋ง์ด ์ฐ๋ ํธ์ธ๋ฐ,
ํ๋ก๊ทธ๋๋จธ์ค ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ จ ๋ฌธ์ ์ ๊ฒฝ์ฐ JOIN, SELECT ๋ฑ ํค์๋๊ฐ ํ์๋์ด ์์ด ๊ตฌํ๋ง ํ๋ฉด ๋๋ค.
๋ ๋ฒจ3, ๋ ๋ฒจ4๋ ์ด๋ ต์ง ์๊ฒ ์ฅ์ฅ ํ๋ฆฌ๋ ๋๋.
SQL ๊ตฌ๋ฌธ์ ์งค ๋๋ SELECT-FROM-WHERE ์์๋ผ๊ณ ํ๋๋ผ๋, ๊ตณ์ด ์์๋ฅผ ๋ฐ๋ผ๊ฐ ํ์๋ ์๋ ๊ฒ ๊ฐ๋ค.
๋๋ ๊ทธ๋๊ทธ๋ ์ง๋ฌธ์ ๋ฐ๋ผ ์ฟผ๋ฆฌ๋ฌธ์ ์์๋ฅผ ๊ฒฐ์ ํด์ ์์ฑํ๋ ๊ฑธ ์ ํธํ๋ ํธ์ด๋ค.
(์ง๋ฌธ์ ์์์๋ถํฐ ์ฝ์์ ๋ ๊ฐ์ฅ ๋จผ์ ์ค๋ช ๋ ๊ตฌ๋ฌธ๋ถํฐ, ์๋ฅผ๋ค์ด ~~ํ ์ด๋ธ์์ ๋ผ๋ฉด WHERE)
LEFT OUTER JOIN ๋ง๊ณ ์ผ๋ฐ ์กฐ์ธ์ผ๋ก ํ์ผ๋ฉด ๋ ๋นจ๋ฆฌ ํ์์ํ ๋ฐ, ์ค๋๋ง์ ์ฐ๋ ์ฟผ๋ฆฌ๋ผ ๊ทธ๋ฐ์ง ์กฐ๊ธ ํท๊ฐ๋ ธ๋.
์ ๋ฌธ์ ์ ๋ฐ๋ฅด๋ฉด ํ ์ด๋ธ๋ช ์ ANIMAL_INS์ ANIMAL_OUTS ๋ ๊ฐ์ง์ด๋ค.
- ANIMAL_INS : ๋๋ฌผ ๋ณดํธ์์ ๋ค์ด์จ ๋๋ฌผ์ ์ ๋ณด๋ฅผ ๋ด์ ํ ์ด๋ธ
- ANIMAL_OUTS : ๋๋ฌผ ๋ณดํธ์์์ ์ ์ ๋ณด๋ธ ๋๋ฌผ์ ์ ๋ณด๋ฅผ ๋ด์ ํ ์ด๋ธ
๊ฐ๋จํ๊ฒ IN ํ ์ด๋ธ๊ณผ OUT ํ ์ด๋ธ์ด๋ผ๊ณ ํ ์ ์๋ค.
ํ ์ด๋ธ์ด ๋ ๊ฐ๊ฐ ์ธ๊ธ๋๊ณ , ์ธ๋ํค๋ก ์ฎ์ฌ ์๋ ๋ชจ์ต์ด ๋ณด์ด๋ฉด 99%๋ JOIN ๋ฌธ์ ์ด๋ค.
ํ์ง๋ง ์ด๋ค JOIN์ ์ฌ์ฉํ ์ง ๋ชจ๋ฅด๋ ์ํ์ธ๋ฐ, ์๋ ์ง๋ฌธ์ ๋ ์ฝ์ด๋ณด๋ฉด
์ฒ์ฌ์ง๋ณ์ผ๋ก ์ธํด ์ผ๋ถ ๋ฐ์ดํฐ๊ฐ ์ ์ค๋์์ต๋๋ค. ์ ์์ ๊ฐ ๊ธฐ๋ก์ ์๋๋ฐ, ๋ณดํธ์์ ๋ค์ด์จ ๊ธฐ๋ก์ด ์๋ ๋๋ฌผ์ ID์ ์ด๋ฆ์ ID ์์ผ๋ก ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์.
ํ์ชฝ ํ ์ด๋ธ์ ์ ๋ณด๊ฐ ์ ์ค๋(OUT ํ ์ด๋ธ์๋ ์๋๋ฐ IN ํ ์ด๋ธ์๋ ์์) ๋๋ฌผ์ ์ฐพ์์ผ ํ๋ค.
OUT ํ ์ด๋ธ์ ์ ๋ณด๊ฐ ์๋ค๋ฉด ๋ฌด์กฐ๊ฑด ๊ฐ์ ธ์์ผ ํ๋ฏ๋ก, OUT ํ ์ด๋ธ์ ์ผํธ์ ๋๊ณ LEFT OUTER JOIN์ ์ํํ๋ค.
- LEFT OUTER JOIN : ์ผ์ชฝ ๋ฐ์ดํฐ๋ ๋ฌด์กฐ๊ฑด ๊ฐ์ ธ์ค๊ณ , ์ค๋ฅธ์ชฝ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ ๊ฐ์ด ์์ผ๋ฉด NULL๋ก ํ๊ธฐ๋จ
FROM ANIMAL_OUTS OUTS LEFT OUTER JOIN ANIMAL_INS INS
ON INS.ANIMAL_ID=OUTS.ANIMAL_ID
์์ฒ๋ผ ANIMAL_ID๋ฅผ ๊ธฐ์ค์ผ๋ก OUT ํ ์ด๋ธ์ ๊ฐ์ด ๋ชจ๋ ๋์ค๊ฒ LEFT OUTER JOIN์ ์ํํ๋ฉด ํด๊ฒฐ๋๋ค.
์ดํ ์ฟผ๋ฆฌ๋ฌธ์ ์์ฑํ๊ธฐ ์ํ ๋๋จธ์ง ์กฐ๊ฑด๋ค์ ์ดํด๋ณด๋ฉด,
์ ์์ ๊ฐ ๊ธฐ๋ก์ ์๋๋ฐ, ๋ณดํธ์์ ๋ค์ด์จ ๊ธฐ๋ก์ด ์๋ ๋๋ฌผ → JOIN ์ - ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ ID์ ์ด๋ฆ → SELECT ์
- ID ์์ผ๋ก ์กฐํ → ORDER BY / ๋ณธ ๋ฌธ์ ์์๋ ์์ฑํ์ง ์์๋ ๊ฒฐ๊ณผ๊ฐ ๋์ผํ๊ฒ ๋์ ์๋ตํ์์
์ ์กฐ๊ฑด์ ์ฟผ๋ฆฌ๋ฌธ์ผ๋ก ์์ฑํ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค.
-- ์ฝ๋๋ฅผ ์
๋ ฅํ์ธ์
SELECT OUTS.ANIMAL_ID, OUTS.NAME
FROM ANIMAL_OUTS OUTS LEFT OUTER JOIN ANIMAL_INS INS
ON INS.ANIMAL_ID=OUTS.ANIMAL_ID
WHERE INS.ANIMAL_ID IS NULL
'๐พ DataBase' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Oracle] Linux CentOS 8 ์๋ฒ์ Oracle DB ์ค์นํ๊ธฐ (0) | 2023.02.08 |
---|---|
[DBeaver] DBeaver ์ค์น์ ORACLE DB ์ ์ํ๊ธฐ (0) | 2023.02.08 |
[MySQL] ํ๋ก๊ทธ๋๋จธ์ค - ์ค๋ ๊ธฐ๊ฐ ๋ณดํธํ ๋๋ฌผ(2)(Lv. 3) (0) | 2023.02.06 |
[MySQL] ํ๋ก๊ทธ๋๋จธ์ค - ์ค๋ ๊ธฐ๊ฐ ๋ณดํธํ ๋๋ฌผ(1)(Lv. 3) (0) | 2023.02.06 |
[MySQL] ํ๋ก๊ทธ๋๋จธ์ค - ์์๋๋ฐ์ ์์์ต๋๋ค(Lv. 3) (0) | 2023.02.06 |