" MYSQL ์ฝ”๋”ฉํ…Œ์ŠคํŠธ์—ฐ์Šต: ๋ณดํ˜ธ์†Œ์—์„œ ์ค‘์„ฑํ™”ํ•œ ๋™๋ฌผ
๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
ํ˜„์—…๊ด‘๊ณ ์ธ/๊ฐ์ข…๊ฟ€ํŒ

MYSQL ์ฝ”๋”ฉํ…Œ์ŠคํŠธ์—ฐ์Šต: ๋ณดํ˜ธ์†Œ์—์„œ ์ค‘์„ฑํ™”ํ•œ ๋™๋ฌผ

by ๋…๋”˜ 2021. 2. 16.
728x90
๋ฐ˜์‘ํ˜•
 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ๋ณดํ˜ธ์†Œ์—์„œ ์ค‘์„ฑํ™”ํ•œ ๋™๋ฌผ

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

programmers.co.kr

ํ•ด๋‹น ๊ธ€์€ Programmers ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต์„ ํ† ๋Œ€๋กœ MYSQL ๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.\


Q ๋ฌธ์ œ: ๋ณดํ˜ธ์†Œ์—์„œ ์ค‘์„ฑํ™” ์ˆ˜์ˆ ์„ ๊ฑฐ์นœ ๋™๋ฌผ์„ ์•„์ด๋””์™€ ์ƒ๋ฌผ์ข…,

์ด๋ฆ„์„ ์กฐํšŒํ•˜๋Š” ์•„์ด๋”” ์ˆœ์œผ๋กœ ์กฐํšŒํ•˜๋Š” SQL๋ฌธ์„ ์ž‘์„ฑ

 

A ์ •๋‹ต์ฝ”๋“œ:

-- ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”
SELECT I.ANIMAL_ID, I.ANIMAL_TYPE, I.NAME FROM ANIMAL_INS I 
LEFT JOIN ANIMAL_OUTS O ON I.ANIMAL_ID=O.ANIMAL_ID
WHERE I.SEX_UPON_INTAKE NOT REGEXP 'Spayed|Neutered'
AND O.SEX_UPON_OUTCOME REGEXP 'Spayed|Neutered'
ORDER BY I.ANIMAL_ID;

๋ฌธ์ œํ’€์ด

 

๋จผ์ € ์ด ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ์œ„ํ•ด์„œ๋Š” ๊ฐ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ (์•ฝ๊ฐ„) ํ•„์š”ํ•˜๋‹ค. 

๋ณดํ˜ธ์†Œ์—์„œ ์ค‘์„ฑํ™” ์ˆ˜์ˆ ์„ ๊ฑฐ์นœ ๋™๋ฌผ์€ ๋ณดํ˜ธ์†Œ์— ๋“ค์–ด์˜ฌ ๋•Œ๋Š” ์ค‘์„ฑํ™”๊ฐ€ ๋˜์–ด์žˆ์ง€ ์•Š์•˜์ง€๋งŒ

๋ณดํ˜ธ์†Œ์—์„œ ๋‚˜๊ฐˆ ๋•Œ ์ค‘์„ฑํ™”๊ฐ€ ๋˜์—ˆ๋‹ค๋ฉด ์ฆ‰, ๋ณดํ˜ธ์†Œ ์•ˆ์—์„œ ์ค‘์„ฑํ™” ์ˆ˜์ˆ ์ด ์ด๋ฃจ์–ด์กŒ๋‹ค๋Š” ๋ง์ด๋‹ค.  

 

์ฆ‰, ๋™๋ฌผ ๋ณดํ˜ธ์†Œ์— ๋“ค์–ด์˜จ ํ…Œ์ด๋ธ”์—์„œ ์ค‘์„ฑํ™”๊ฐ€ ์•ˆ๋œ ๋™๋ฌผ ์นœ๊ตฌ๋“ค ์ค‘

์ž…์–‘ ๋ณด๋‚ผ ๋•Œ ์ค‘์„ฑํ™”๊ฐ€ ๋œ ๋™๋ฌผ์นœ๊ตฌ๋“ค์„ ์ฐพ์•„์ฃผ๋ฉด ๋œ๋‹ค. 

 

๋ฌธ์ œ ์„ค๋ช…์„ ๋ณด๋ฉด ์ˆ˜์ปท์ผ ๊ฒฝ์šฐ Neutered, ์•”์ปท์ผ ๊ฒฝ์šฐ Spayed, ์ค‘์„ฑํ™” ์ „ ์ผ ๊ฒฝ์šฐ Intact ๋กœ ํ‘œ๊ธฐํ•œ๋‹ค.  

๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋™๋ฌผ ๋ณดํ˜ธ์†Œ ๋“ค์–ด์˜จ ํ…Œ์ด๋ธ” ( ์ค‘์„ฑํ™”๊ฐ€ ์•ˆ๋œ ๋™๋ฌผ ์นœ๊ตฌ ) & ์ž…์–‘ ํ…Œ์ด๋ธ” ( ์ค‘์„ฑํ™”๊ฐ€ ๋œ ๋™๋ฌผ ์นœ๊ตฌ ) 

 

๋™๋ฌผ๋ณดํ˜ธ์†Œ ๋“ค์–ด์˜จ ๋™๋ฌผ ํ…Œ์ด๋ธ” =ANIMAL_IN

์ž…์–‘๊ฐ„ ๋™๋ฌผ๋“ค ํ…Œ์ด๋ธ” = ANIMAL_OUT 

 

์กฐ๊ฑด ANIMAL_IN  ์ค‘์„ฑํ™” ์—ฌ๋ถ€ ์ปฌ๋Ÿผ์—์„œ Intact ๋‹จ์–ด๊ฐ€ ๋“ค์–ด๊ฐ„ ๋™๋ฌผ๋“ค์„ ์ฐพ์•„์ฃผ๋ฉด ๋˜๊ณ 

ANIMAL_OUT์—์„œ๋Š” ์ค‘์„ฑํ™” ์—ฌ๋ถ€ ์ปฌ๋Ÿผ์—์„œ Neutered, Spayed ๋‹จ์–ด๊ฐ€ ๋“ค์–ด๊ฐ„ ๋™๋ฌผ๋“ค์„ ์ฐพ์•„์ฃผ๋ฉด๋œ๋‹ค.

 

์ด ๋•Œ LIKE ์—ฐ์‚ฐ์ž์™€ OR ์„ ์จ๋„ ๋˜์ง€๋งŒ ์กฐ๊ธˆ ๋” ๊ฐ„๊ฒฐํ•œ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ์œ„ํ•˜์—ฌ REGEXP ์ •๊ทœ์‹์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

-- ์•„๋ž˜ ์ฝ”๋“œ๋Š” ๋ฌด์‹œํ•ด์ฃผ์„ธ์š”.
SELECT * FROM ALL 
-- LIKE ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ’€์ด 
WHERE 
	(I.SEX_UPON_INTAKE LIKE '%Intact%')
AND
	(O.SEX_UPON_OUTCOME LIKE '%Spayed%'
OR
	O.SEX_UPON_OUTCOME LIKE '%Neutered%')
    
-- REGEXP์„ ์‚ฌ์šฉํ•œ ์กฐ๊ธˆ ๋” ๊ฐ„๊ฒฐํ•œ ์ฝ”๋“œ 
WHERE 
	I.SEX_UPON_INTAKE REGEXP 'Intact'
AND 
	O.SEX_UPON_OUTCOME REGEXP 'Spayed|Neutered'

 

์ฐธ๊ณ : REGEXO ์ •๊ทœ์‹์€ ์‰ฝ๊ฒŒ LIKE IN ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์‰ฝ๋‹ค. 

์ฆ‰ ํ…Œ์ด๋ธ”A.์ปฌ๋ŸผB REGEXP  '๋ฐ”๋ณด'  = ํ…Œ์ด๋ธ” A์˜ ์ปฌ๋ŸผB ๋ฐ์ดํ„ฐ๊ฐ’ ์ค‘ ๋ฐ”๋ณด๋ผ๋Š” ๋‹จ์–ด๊ฐ€ ๋“ค์–ด๊ฐ„ ํ–‰์„ ์ถ”์ถœํ•˜์—ฌ๋ผ. 

๋ฐ˜์‘ํ˜•