๐Ÿ–ฅ๏ธ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ/SQL

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] [SQL] ๋ณดํ˜ธ์†Œ์—์„œ ์ค‘์„ฑํ™”ํ•œ ๋™๋ฌผ

rtw0202 2026. 2. 16. 16:02

1. ๋ฌธ์ œ ์„ค๋ช…

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

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

๋ณดํ˜ธ์†Œ์—์„œ ์ค‘์„ฑํ™” ์ˆ˜์ˆ ์„ ๊ฑฐ์นœ ๋™๋ฌผ ์ •๋ณด๋ฅผ ์•Œ์•„๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค. ๋ณดํ˜ธ์†Œ์— ๋“ค์–ด์˜ฌ ๋‹น์‹œ์—๋Š” ์ค‘์„ฑํ™”๋˜์ง€ ์•Š์•˜์ง€๋งŒ, ๋ณดํ˜ธ์†Œ๋ฅผ ๋‚˜๊ฐˆ ๋‹น์‹œ์—๋Š” ์ค‘์„ฑํ™”๋œ ๋™๋ฌผ์˜ ์•„์ด๋””์™€ ์ƒ๋ฌผ ์ข…, ์ด๋ฆ„์„ ์กฐํšŒํ•˜๋Š” ์•„์ด๋”” ์ˆœ์œผ๋กœ ์กฐํšŒํ•˜๋Š” SQL ๋ฌธ์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

 

2. ์ถœ๋ ฅ ์˜ˆ์‹œ

 

3. ๋ฌธ์ œ ๋‹ต์•ˆ

1) ์ธ๋ฑ์Šค๋กœ ํ…์ŠคํŠธ ์ถ”์ถœํ•˜์—ฌ ํ™•์ธ

# ins ํ…Œ์ด๋ธ”์—์„œ๋Š” sex_upon_intake๊ฐ€ Intact๋กœ ์‹œ์ž‘
# outs ํ…Œ์ด๋ธ”์—์„œ๋Š” sex_iupon_outcome์ด Spayed ๋˜๋Š” Neutered๋กœ ์‹œ์ž‘
SELECT
    t.animal_id,
    t.animal_type,
    t.name
FROM (
    SELECT
        i.animal_id,
        i.animal_type,
        i.name
      FROM animal_ins i
      JOIN animal_outs o
      ON i.animal_id = o.animal_id
      WHERE LEFT(i.sex_upon_intake, 6) = 'Intact' AND
            (LEFT(o.sex_upon_outcome, 6) = 'Spayed' OR
             LEFT(o.sex_upon_outcome, 8) = 'Neutered')
      ORDER BY o.animal_id, o.animal_type, o.name
     ) t

 

2) ํ…์ŠคํŠธ ํฌํ•จํ•˜๋Š”์ง€ ํ™•์ธ

# ins ํ…Œ์ด๋ธ”์—์„œ๋Š” sex_upon_intake์— Intact ํฌํ•จ
# outs ํ…Œ์ด๋ธ”์—์„œ๋Š” sex_iupon_outcome์— Spayed ๋˜๋Š” Neutered ํฌํ•จ
SELECT
    t.animal_id,
    t.animal_type,
    t.name
FROM (
    SELECT
        i.animal_id,
        i.animal_type,
        i.name
      FROM animal_ins i
      JOIN animal_outs o
      ON i.animal_id = o.animal_id
      WHERE i.sex_upon_intake LIKE 'Intact%' AND
            (o.sex_upon_outcome LIKE 'Spayed%' OR
            o.sex_upon_outcome LIKE 'Neutered%')
      ORDER BY o.animal_id, o.animal_type, o.name
     ) t