๐Ÿ’พ DataBase

[MySQL] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ์—†์–ด์ง„ ๊ธฐ๋ก ์ฐพ๊ธฐ(Lv. 3)

mxnxeonx 2023. 2. 6. 12:50
728x90
728x90

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

์ฒœ์žฌ์ง€๋ณ€์œผ๋กœ ์ธํ•ด ์ผ๋ถ€ ๋ฐ์ดํ„ฐ๊ฐ€ ์œ ์‹ค๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ž…์–‘์„ ๊ฐ„ ๊ธฐ๋ก์€ ์žˆ๋Š”๋ฐ, ๋ณดํ˜ธ์†Œ์— ๋“ค์–ด์˜จ ๊ธฐ๋ก์ด ์—†๋Š” ๋™๋ฌผ์˜ 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
728x90
320x100