
이름에 el이 들어가는 동물 찾기
https://school.programmers.co.kr/learn/courses/30/lessons/59047
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
보호소에 돌아가신 할머니가 기르던 개를 찾는 사람이 찾아왔습니다.
이 사람이 말하길 할머니가 기르던 개는 이름에 'el'이 들어간다고 합니다.
동물 보호소에 들어온 동물 이름 중,
이름에 "EL"이 들어가는 개의 아이디와 이름을 조회하는 SQL문을 작성해주세요.
이때 결과는 이름 순으로 조회해주세요. 단, 이름의 대소문자는 구분하지 않습니다.
▼ (MySQL) LIKE '%'
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE ANIMAL_TYPE = 'Dog' AND NAME LIKE '%EL%'
ORDER BY NAME
일단 '개'를 찾고 있으므로
WHERE절에 동물 유형이 'Dog'인 경우를 조건으로 주고,
이름에 'el'이 포함된 개를 찾아야 하므로
LIKE '%'를 조건으로 줌
여기에서 LIKE는 특정 문자를 찾을 때 사용함
LIKE 뒤 작은 따옴표 안에 찾고자 하는 문자를 적어주는데
여기에서 %는 모든 문자를 가리킴
예를들어,
'%el'은 el로 끝나는 문자조합
'el%'는 el로 시작하는 문자조합
'%el%'는 el이 중간에 포함된 문자조합
'%e%l%'는 중간에 e와 l이 포함된 문자조합
이런 식임
마지막으로 대소문자 구분은 하지 않는다고 되어 있는데
MySQL는 LIKE를 사용하여 문자열 검사 시
대소문자를 구분하지 않고 특정 문자를 찾아주기 때문에
다른 조건이 필요하지 않았음 (정규식도 마찬가지)
만약 대소문자를 구분해서 검색하고 싶으면
BINARY(컬럼명) LIKE '%'를 사용하면 됨
저는 그냥 상단 쿼리문으로 정답처리가 돼서 넘어가려고 했는데
다른 분들 코드 보다가 알게 된 사실.!.! 두둥
그럼 Oracle, PostgreSQL 등 다른 DBMS에서는
어떻게 해야 정답 처리가 될까?
▼ UPPER / LOWER() 함수와 LIKE '%'
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE ANIMAL_TYPE = 'Dog' AND UPPER(NAME) LIKE UPPER('%el%')
ORDER BY NAME;
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE ANIMAL_TYPE = 'Dog' AND LOWER(NAME) LIKE LOWER('%el%')
ORDER BY NAME;
일단 컬럼값을 UPPER() 함수로
전부 대문자로 만들어 버리거나
LOWER() 함수로
전부 소문자로 만든 뒤에
LIKE '%'문을 사용해 'el'이 들어간 이름을 찾으면 됨
▼ (Oracle) REGEXP_LIKE() 사용
SELECT ANIMAL_ID, NAME FROM ANIMAL_INS
WHERE REGEXP_LIKE (NAME,'El','i') AND ANIMAL_TYPE = 'Dog'
ORDER BY NAME;
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE REGEXP_LIKE(NAME,'el|eL|El|EL') AND ANIMAL_TYPE='Dog'
ORDER BY NAME
마지막으로 REGEXP_LIKE()를 사용해서
답을 구하신 분들도 계셨음
REGEXP_LIKE()는
오라클에서 제공하는 정규표현식 지원 함수로
REGEXP_LIKE(컬럼명, 찾는 문자, 대소문자 구분 여부)
이렇게 사용할 수 있음
여기에서 마지막 대소문자 구분 여부는
'c'와 'i' 중에 넣어주면 되는데
c는 대소문자를 구분(Case Sensitive)할 때 사용하고,
i는 대소문자를 무시(Ignore) 할 때 사용함
[참고 게시글]
https://jack-of-all-trades.tistory.com/382
오라클 like 구문 업그레이드 regexp_like 샘플예제 (정규표현식 기본 응용)
오라클에서 제공하는 정규표현식 지원 함수 regexp_like 를 이용하면 기존 like 구문에서 할 수 없었거나 아주 어렵게 구현했던 부분들을 아주 쉽게 구현할 수 있습니다. regexp_like 기본 구문(Syntax) 는
jack-of-all-trades.tistory.com
댓글