SQL 프로그래머스 | 이름에 el이 들어가는 동물 찾기 | LIKE '%' 사용법 | REGEXP_LIKE() 함수 | UPPER / LOWER() 함수

    728x90

     

    이름에 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

    728x90

    댓글