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