본문 바로가기

STUDY/SQL, DB

[MySQL] - REGEXP(REGular EXPression)

프로그래머스에서 다음과 같은 문제를 풀었다.

 

 

조건만 잘 맞춰주면 되는 문제라 생각했고, 실제로도 그러했다. 복잡한 함수나 쿼리문을 짤 필요도 없어서, 아래처럼 쿼리문을 작성했고 ACCEPT 되었다.

 

-- 처음 풀이. 정답.
SELECT CAR_TYPE
     , COUNT(CAR_TYPE) AS CARS
    FROM CAR_RENTAL_COMPANY_CAR
    WHERE OPTIONS LIKE '%통풍시트%'
        OR OPTIONS LIKE '%열선시트%'
        OR OPTIONS LIKE '%가죽시트%'
    GROUP BY CAR_TYPE
    ORDER BY CAR_TYPE;

 

 

그런데 WHERE절에 조건을 3개나 써 주기가 좀 귀찮았더라... 

 

 

"OPTIONS에 통풍시트나 열선시트, 가죽시트 셋 중 하나라도 있으면"

 

이라는 조건을 한 줄로 걸어주려면 어떻게 하면 좋을까?

 

 아하 IN과 LIKE를 섞어 쓰면 되겠다! 싶어서 바 - 로 적용...

...해봤지만 IN과 LIKE는 한 번에 섞어 쓸 수 없었다.

-- 야심차게 고쳐본 풀이. 오답. 구문 ERROR
SELECT CAR_TYPE
     , COUNT(CAR_TYPE) AS CARS
    FROM CAR_RENTAL_COMPANY_CAR
    WHERE OPTIONS IN LIKE ('%통풍시트%', '%열선시트%', '%가죽시트%')
    GROUP BY CAR_TYPE
    ORDER BY CAR_TYPE;

 

 

 

그럼 어떻게 해야 하나 구글링해보던 차에 발견한 것이 바로 이 REGEXP 연산자다.

 

REGEXP(REGular EXPression)

이라는 이름처럼,  정규 표현식을 이용해 문자열을 검색한다.

REGEXP를 이용하면 기본 연산자보다 복잡한 문자열 조건을 걸어 데이터를 검색할 수 있다.

 

REGEXP를 사용해서 맨 처음 작성했던 쿼리문을 다시 작성하면, 아래처럼 한 줄로 조건을 깔끔하게 작성할 수 있다.

 

-- REGEXP 사용 쿼리.
SELECT CAR_TYPE
     , COUNT(CAR_TYPE) AS CARS
    FROM CAR_RENTAL_COMPANY_CAR
    WHERE OPTIONS REGEXP '통풍시트|열선시트|가죽시트'
    GROUP BY CAR_TYPE
    ORDER BY CAR_TYPE;

 

정규표현식을 사용해 데이터를 검색하는 것이니, 위의 예시 말고 다양한 형태로 활용이 가능하다.