코딩테스트

[26.02.04 코테(MySQL/Oracle)]-보호소에서 중성화한 동물

지니248 2026. 2. 4. 19:33

Lv4. 보호소에서 중성화한 동물 (MySQL)

링크: https://school.programmers.co.kr/learn/courses/30/lessons/59045

 

내가 작성한 코드

-- 풀이1 (LIKE)
SELECT O.ANIMAL_ID, O.ANIMAL_TYPE, O.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;

-- 풀이2 (REGEXP)
SELECT O.ANIMAL_ID, O.ANIMAL_TYPE, O.NAME
FROM ANIMAL_INS I
JOIN ANIMAL_OUTS O
  ON I.ANIMAL_ID = O.ANIMAL_ID
WHERE I.SEX_UPON_INTAKE REGEXP '^Intact'
  AND O.SEX_UPON_OUTCOME REGEXP '^(Spayed|Neutered)'
ORDER BY O.ANIMAL_ID;

 

Oracle

-- REGEXP_LIKE
-- 오라클에서는 REGEXP_LIKE(컬럼, 패턴)을 사용
SELECT O.ANIMAL_ID, O.ANIMAL_TYPE, O.NAME
FROM ANIMAL_INS I
JOIN ANIMAL_OUTS O 
  ON O.ANIMAL_ID = I.ANIMAL_ID
WHERE REGEXP_LIKE(I.SEX_UPON_INTAKE, '^Intact')
  AND REGEXP_LIKE(O.SEX_UPON_OUTCOME, '^(Spayed|Neutered)')
ORDER BY O.ANIMAL_ID

 

REGEXP / REGEXP_LIKE

  • 문자열 패턴 검색 (정규표현식)
  • OR, 글자수, 시작/끝 등 한번에 가능
  • REGEXP '^(Spayed|Neutered)'
    • ^ : 문자열 시작
    • | : 또는 (OR)
  • $ : 끝 
    • REGEXP 'Male$'
  • . : 아무  문자 1개
    • REGEXP 'D.g'
    • Dog, Dig, D1g, Doog (2글자이므로 불가능)
  •  {n} : 정확히 n글자 (D+아무글자=총3글자)
    • REGEXP '^D.{2}$'
    • Dog, Dig, Door (불가능)
  • * : 0번 이상
    • REGEXP 'a*'
  • + : 1번 이상
    • REGEXP 'a+'