SQL

[SQL] 문자열에서 특정 문자 추출하기(LIKE, REGEXP)

ollive 2024. 7. 1. 20:24

<문제>

CAR_RENTAL_COMPANY_CAR 테이블에서 '통풍시트', '열선시트', '가죽시트' 중 하나 이상의 옵션이 포함된 자동차가 자동차 종류 별로 몇 대인지 출력하는 SQL문을 작성해주세요. 이때 자동차 수에 대한 컬럼명은 CARS로 지정하고, 결과는 자동차 종류를 기준으로 오름차순 정렬해주세요.

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

<풀이1>

처음에는 같은 문자열을 뽑아내면 되므로 IN에 '통풍시트', '열선시트', '가죽시트'를 넣어보고 결과가 아니라서 %도 붙여서 작성해 보았다. 둘다 아니였다. 

SELECT CAR_TYPE, COUNT(CAR_ID) CARS
FROM CAR_RENTAL_COMPANY_CAR
WHERE OPTIONS IN('%통풍시트%' OR '%열선시트%' OR '%가죽시트%')
GROUP BY CAR_TYPE
ORDER BY CAR_TYPE

 

<풀이2: LIKE>

그냥 틀린게 아니라 IN을 사용하면 안 된다고 한다.IN으로 하면 정확히 일치하는 값 데이터 만을 뽑아내기 때문에 해당 조건과 완전히 같을 경우가 아니라면 사용이 할 수 없다고 한다. 이 데이터의 옵션변수는 여러 문자가 함께 있어서 LIKE 로 값 추출을 해야 했다. 

SELECT CAR_TYPE, COUNT(CAR_ID) CARS
FROM CAR_RENTAL_COMPANY_CAR
WHERE OPTIONS LIKE '%통풍시트%'
    OR OPTIONS LIKE '%열선시트%'
    OR OPTIONS LIKE '%가죽시트%'
GROUP BY CAR_TYPE
ORDER BY CAR_TYPE

<풀이3: REGEXP>

 REGEXP (정규표현식)을 새로 알게되었다. 정규표현식은 패턴을 찾아서 문자열을 검색하거나 치환한다. 이 문제에서는 여러 문자열 중 해당표현을 하나이상 포함하는 문자열을 반환해야하므로 | 또는 OR 을 사용하면 된다. |를 사용할때는 서로 띄어쓰지 않도록 주의한다. 

SELECT CAR_TYPE, COUNT(*) AS CARS
FROM CAR_RENTAL_COMPANY_CAR
WHERE OPTIONS REGEXP('통풍시트|열선시트|가죽시트')
GROUP BY CAR_TYPE
ORDER BY CAR_TYPE

그리고, ()를 제외하고 작성해도 된다.

SELECT CAR_TYPE, COUNT(*) AS CARS
FROM CAR_RENTAL_COMPANY_CAR
WHERE OPTIONS REGEXP '통풍시트|열선시트|가죽시트'
GROUP BY CAR_TYPE
ORDER BY CAR_TYPE

 

 REGEXP는 이블로그에 잘 정리되어 있다.

 

[MY SQL] 정규식 (REGEXP)

REGEXP ?? REGEXP는 LIKE를 이용한 검색과 달리 Regular Expression(정규 표현식)를 이용해 검색한다. REGEXP를 사용하면 SQL에서 정규표현식을 활용하여 기본 연산자보다 복잡한 문자열 조건을 걸어 데이터를

dadev.tistory.com