Programming/SQL
[TIL 0628] 루시와 엘라 못 찾을 뻔한 썰
용스토리랜드
2024. 6. 28. 14:52
문제설명 : 문제에서 제시해준 성명이 들어간 경우에 한해서 ANIMAL_ID, NAME, SEX_UPON_INTAKE 를 구해주는 문제 !
일단 먼저, 처음 작성했던 코드 (실패 코드) 는 이렇습니다.
SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS
WHERE NAME REGEXP 'Lucy|Ella|Pickle|Rogan|Sabrina|Mitty'
ORDER BY ANIMAL_ID
REGEXP 함수를 사용해서 'Lucy|Ella|Pickle|Rogan|Sabrina|Mitty' 와 같이 따옴표 안의 이름이 포함되면 TRUE를 내도록 의도하고 작성했다.
하지만, 위의 방식은 조건에서 제시한 이름만 조회해야할 경우에는 적절하지 않다.(는 것을 깨달았음) Lucyer, Ellaie, Pickleee 과 같은 이름도 모두 참이 될 수 있기 때문에, 프로그래머스 상에서 test set 에서는 코드 실행 결과가 문제가 없어 보이지만 예외적인 경우가 들어간다면, 오답이 되기 때문이다.
위의 코드는 LIKE '%Luch%' OR LIKE '%Elle%' OR .... 와 같은 코드이다.
그래서 해결한 방법이, 아래와 같습니다.
# 1.
SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS
WHERE NAME REGEXP '^(Lucy|Ella|Pickle|Rogan|Sabrina|Mitty)$'
ORDER BY ANIMAL_ID
# 2.
SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS
WHERE NAME IN('Lucy','Ella','Pickle','Rogan','Sabrina','Mitty')
ORDER BY ANIMAL_ID
#3.
-- 코드를 입력하세요
SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS
-- WHERE NAME REGEXP 'Lucy|Ella|Pickle|Rogan|Sabrina|Mitty'
WHERE NAME like 'Lucy' OR NAME like 'Ella' OR NAME like 'Pickle' OR NAME like 'Rogan' OR NAME like 'Sabrina' OR NAME like 'Mitty'
ORDER BY ANIMAL_ID
1번과 같이 괄호() 로 묶어주고 앞 뒤로 ^ 와 $를 표시해주는 정규표현식을 사용하면, 괄호안의 값만 True 라고 지정해줄 수 있다.
그리고 2번 방법과 같이 IN 함수를 해줘서 안에 있는 값들이 포함된 경우만 TRUE 를 반환하는 방법이 있다.
마지막 3번 방법은 LIKE 문을 사용하는 건데 % 기호 없이 포함되어야할 값들을 따옴표에 작성해서 OR 논리 연산자로 줄줄이 연결하는 것이다. 개인적인 코딩 관점에서는 가장 비효율적인 방법이라고 생각이 듭니다.
문제에 숨어 있는 예외 혹은 제약사항들을 꼼꼼히 살펴보기 ! 당황하지 말고 Try & Error
반응형