Data Engineering/MySQL & Oracle
[프로그래머스 MySQL,Oracle] - 이름에 el이 들어가는 동물 찾기
ddoddo201
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 |