프로그래머스에서 다음과 같은 문제를 풀었다.
조건만 잘 맞춰주면 되는 문제라 생각했고, 실제로도 그러했다. 복잡한 함수나 쿼리문을 짤 필요도 없어서, 아래처럼 쿼리문을 작성했고 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;
정규표현식을 사용해 데이터를 검색하는 것이니, 위의 예시 말고 다양한 형태로 활용이 가능하다.
'STUDY > SQL, DB' 카테고리의 다른 글
[MySQL] - GROUP_CONCAT() (0) | 2023.12.27 |
---|---|
HackerRank - SQL (Advanced) Certificate (2) | 2023.12.26 |
HackerRank - SQL (Intermediate) Certificate (2) | 2023.12.26 |
[MySQL] - Row import failed with error: ("Data truncated for column at row 1", 1265) (2) | 2023.12.21 |
[MySQL] - Invalid use of group function (0) | 2023.12.15 |