SQL

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค level 3] ์—†์–ด์ง„ ๊ธฐ๋ก ์ฐพ๊ธฐ

1eehyunji 2023. 7. 12. 02:15

๋ฌธ์ œ ์„ค๋ช…

ANIMAL_INS ํ…Œ์ด๋ธ”์€ ๋™๋ฌผ ๋ณดํ˜ธ์†Œ์— ๋“ค์–ด์˜จ ๋™๋ฌผ์˜ ์ •๋ณด๋ฅผ ๋‹ด์€ ํ…Œ์ด๋ธ”์ž…๋‹ˆ๋‹ค. ANIMAL_INS ํ…Œ์ด๋ธ” ๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์œผ๋ฉฐ, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE๋Š” ๊ฐ๊ฐ ๋™๋ฌผ์˜ ์•„์ด๋””, ์ƒ๋ฌผ ์ข…, ๋ณดํ˜ธ ์‹œ์ž‘์ผ, ๋ณดํ˜ธ ์‹œ์ž‘ ์‹œ ์ƒํƒœ, ์ด๋ฆ„, ์„ฑ๋ณ„ ๋ฐ ์ค‘์„ฑํ™” ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

NAMETYPENULLABLE

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์˜ ์™ธ๋ž˜ ํ‚ค์ž…๋‹ˆ๋‹ค.

NAMETYPENULLABLE

ANIMAL_ID VARCHAR(N) FALSE
ANIMAL_TYPE VARCHAR(N) FALSE
DATETIME DATETIME FALSE
NAME VARCHAR(N) TRUE
SEX_UPON_OUTCOME VARCHAR(N) FALSE

์ฒœ์žฌ์ง€๋ณ€์œผ๋กœ ์ธํ•ด ์ผ๋ถ€ ๋ฐ์ดํ„ฐ๊ฐ€ ์œ ์‹ค๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ž…์–‘์„ ๊ฐ„ ๊ธฐ๋ก์€ ์žˆ๋Š”๋ฐ, ๋ณดํ˜ธ์†Œ์— ๋“ค์–ด์˜จ ๊ธฐ๋ก์ด ์—†๋Š” ๋™๋ฌผ์˜ ID์™€ ์ด๋ฆ„์„ ID ์ˆœ์œผ๋กœ ์กฐํšŒํ•˜๋Š” SQL๋ฌธ์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

 

๋ฌธ์ œํ’€์ด

SELECT ANIMAL_OUTS.ANIMAL_ID, ANIMAL_OUTS.NAME FROM ANIMAL_OUTS
LEFT JOIN ANIMAL_INS 
ON ANIMAL_INS.ANIMAL_ID=ANIMAL_OUTS.ANIMAL_ID
WHERE ANIMAL_INS.ANIMAL_ID IS NULL
ORDER BY ANIMAL_OUTS.ANIMAL_ID;

์ž…์–‘๊ฐ„ ๊ธฐ๋ก์€ ์žˆ์ง€๋งŒ, ๋ณดํ˜ธ์†Œ์— ๋“ค์–ด์˜จ ๋™๋ฌผ์˜ ๋ฐ์ดํ„ฐ ์ฆ‰, ANIMAL_OUTS ํ…Œ์ด๋ธ”์— ์žˆ์ง€๋งŒ, ANIMAL_INS ํ…Œ์ด๋ธ”์— ์—†๋Š” ๋™๋ฌผ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•ด์•ผ ํ•œ๋‹ค. 

๊ทธ๋Ÿฌ๊ธฐ ์œ„ํ•ด์„œ ์™ผ์ชฝ ํ…Œ์ด๋ธ”์ธ ANIMAL_OUTS์™€ ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์ธ ANIMAL_INS๋ฅผ JOINํ•˜์ง€๋งŒ ON์ ˆ์— ํ•ด๋‹นํ•˜๋Š” ์กฐ๊ฑด๋Œ€๋กœ ANIMAL_ID๊ฐ€ ๋งค์นญ๋˜์ง€ ์•Š๋Š” ANIMAL_INS์˜ ๋ฐ์ดํ„ฐ๋“ค์€ NULL๋กœ ํ‘œํ˜„ํ•˜๊ณ  ๋ชจ๋“  ANIMAL_OUTS ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•˜๋Š” LEFT JOIN์„ ์‚ฌ์šฉํ–ˆ๋‹ค. 

 

๊ทธ๋ฆฌ๊ณ  ์œ„์—์„œ JOIN์„ ํ†ตํ•ด ์ถ”์ถœํ•œ ๋ฐ์ดํ„ฐ ์ค‘ ANIMAL_INS ํ…Œ์ด๋ธ” ๊ฐ’์ด NULL์ธ ๋ฐ์ดํ„ฐ๋“ค์„ ์ถ”์ถœํ–ˆ๋‹ค. 

์ฒ˜์Œ์— NULL์ธ ๋ฐ์ดํ„ฐ๋“ค์„ ์ถ”์ถœํ•  ๋•Œ ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑํ•˜๋‹ˆ ์•„๋ฌด๊ฒƒ๋„ ์ถœ๋ ฅ๋˜์ง€ ์•Š์•˜๋‹ค. 

WHERE ANIMAL_INS.ANIMAL_ID = NULL

๊ทธ๋ž˜์„œ ๊ฒ€์ƒ‰์„ ํ•ด๋ณด๋‹ˆ NULL์€ ๋ฐ์ดํ„ฐ๋กœ ์ทจ๊ธ‰ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— NULL์ธ ๋ฐ์ดํ„ฐ๋ฅผ ํƒ์ƒ‰ํ•˜๋ ค๋ฉด IS NULL์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜๋‹ค. 

ํ•ด๋‹น ๋ถ€๋ถ„์„ IS NULL๋กœ ๋ฐ”๊พธ๊ณ , ANIMAL_OUTS์˜ ANIAML_ID ์ปฌ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅํ–ˆ๋‹ค.