30대 갓생살기😍

반응형
 

코딩테스트 연습 - 보호소에서 중성화한 동물

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 데이터값 중 바보라는 단어가 들어간 행을 추출하여라. 

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading