-
[프로그래머스 MySQL,Oracle] - 이름에 el이 들어가는 동물 찾기Data Engineering/MySQL & Oracle 2021. 6. 28. 20:44
[프로그래머스 String - 이름에 el이 들어가는 동물 찾기]
MySQL
*헷갈린 이유: "개의 아이디와 이름" 조건을 생각하지 못했다.
→ 테이블의 ANIMAL_TYPE에는 Dog, Cat이 존재함을 고려해줘야 한다.
SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE NAME LIKE '%EL%' AND ANIMAL_TYPE='Dog' ORDER BY NAME
Oracle
→ 오라클에서는 대소문를 구분하지 못한다. 그러므로 NAME을 대문자 또는 소문자로 바꿔서 비교해줘야 한다.
SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE LOWER(NAME) LIKE '%el%' AND ANIMAL_TYPE='Dog' -- WHERE UPPER(NAME) LIKE '%EL%' AND ANIMAL_TYPE='Dog' ORDER BY NAME
위의 방법으로 충분히 풀 수 있지만,
새로운 방법을 알아보자.
MySQL with REGEXP
→ 사실 MySQL은 대소문자를 구분하지 않아서 굳이 아래 방법을 사용하지 않아도 된다.
단지, 오라클과 MySQL에서의 문법 차이를 보여주려고 사용한 것이다.
SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE NAME REGEXP('EL|el') AND ANIMAL_TYPE='Dog' ORDER BY NAME
Oracle with REGEXP_LIKE
→ 오라클은 대소문자를 구분하지 못해서 'EL|El|eL|el' 조건을 줘야 한다.
→ %EL%, %El%, %eL', %el% 효과를 나타낸다. (즉, EL/ El/ eL/ el을 포함하는 단어를 의미함)
SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE REGEXP_LIKE(NAME,'EL|El|eL|el') AND ANIMAL_TYPE='Dog' ORDER BY NAME
<공부>
📍 대소문자 구분
◾ MySQL → 대소문자를 구분하지 않는다.
◾ Oracle → 대소문자를 구분한다.
📍 다중 LIKE 연산
◾ MySQL : 컬럼명 REGEXP(정규식)
ex) NAME REGEXP('EL|el')
◾ Oracle : REGEXP_LIKE(컬럼명, 정규식)
ex) REGEXP_LIKE(NAME, 'EL| El| eL| el')
📍 그럼 정규식은 무엇일까?
: 다양한 메타 문자들을 이용한 검색 방법이다. 아래는 주로 사용하는 정규 표현식이다.
(조금 어렵지만 문제를 풀다보면 익숙해질 것이다!)
사용 기호 의미 예시 ^ 해당 문자로 시작하는 line 출력 ^pattern $ 해당 문자로 끝나는 line 출력 pattern$ . A로 시작해서 B로 끝남 (.은 1개의 문자) S....E * (글자가 없는 것도 포함한) 모든 것 [a-z]* [] 해당 문자에 해당하는 하나의 문자 [Pp]attern [^] 해당 문자에 해당하지 않는 하나의 문자 [^a-m]attern