class="layout-aside-right paging-number">
본문 바로가기
TIL

[TIL157] solvesql - 언더스코어(_) 가 포함되지 않은 데이터 찾기

by heestory323 2026. 6. 18.

문제 설명

GA 로그의 page_location 컬럼에서

언더스코어(_)가 포함되지 않은 페이지 경로만 조회

해야 한다.

추가 조건

  • 중복 제거
  • 오름차순 정렬

내가 작성한 코드

SELECT page_location
FROM ga
WHERE page_location NOT IN (
    SELECT page_location
    FROM ga
    WHERE page_location LIKE '%_%'
)

왜 틀렸을까?

문제는 여기.

LIKE '%_%'

많은 사람들이

_ 가 포함된 문자열

이라고 생각한다.

하지만 SQL에서는 다르다.


LIKE의 와일드카드

%

LIKE '%abc%'

의미

abc를 포함하는 문자열

_

LIKE '_'

의미

임의의 문자 1개

 


실제 언더스코어 찾는 방법

언더스코어를 문자 그대로 찾으려면

escape 처리 필요.


MySQL

LIKE '%\_%'

또는

LIKE '%$_%' ESCAPE '$'

정답

SELECT DISTINCT page_location
FROM ga
WHERE page_location NOT LIKE '%\_%'
ORDER BY page_location;

기억할 포인트

%

0개 이상 문자


_

임의의 문자 1개


\_

실제 언더스코어 문자


한 줄 요약

이 문제의 함정은 _가 언더스코어 문자가 아니라 LIKE의 와일드카드라는 점이다. 실제 언더스코어를 찾으려면 LIKE '%\_%'처럼 escape 처리를 해야 하며, 언더스코어가 없는 데이터는 NOT LIKE '%\_%'로 조회한다.