프로그래머스 루시와 엘라 찾기를 풀던 도중
SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS
WHERE NAME REGEXP 'Lucy|Ella|Pickle|Rogan|Sabrina|Mitty'
ORDER BY ANIMAL_ID ASC
로 풀어 제출하였지만 답은 같아도 틀렸습니다라는 결과가 나와 알아보던 중 REGEXP의 특징을 다시 알게 되었습니다.
이 문제가 틀린 이유는 정규표현식의 특징때문으로,
SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS
WHERE NAME REGEXP 'ucy|Ella|Pickle|Rogan|Sabrina|Mitty'
ORDER BY ANIMAL_ID
만약 이 코드를 실행시켜보면 ucy여서 Lucy가 검색이 안될 것 같지만 잘 됩니다.
REGEXP는 문자열 내부에 어떤 부분이든 해당 정규식이 존재한다면 True 입니다.
따라서 i'm not Lucy 라는 이름을 가진 동물이 있다면 위의 식에서는 통과를 해 버리기 때문에 결과가 다르게 나왔던 것이었습니다.
따라서 일치하는 것을 찾는 정규표현식을 사용할 때에는
SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS
WHERE NAME regexp "^(Lucy|Ella|Pickle|Rogan|Sabrina|Mitty)$"
ORDER BY ANIMAL_ID
와 같이 시작과 끝역시 표시를 해주어야 정확한 결과가 도출됩니다.