본문 바로가기
C.W.K.
Stream
Lesson 03 of 10 · published

LIKE, GLOB, 패턴 매칭

~12 min · sql, like, glob, patterns

Level 0Scout
0 XP0/80 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

부분 문자열 검색, 제대로 하는 법

SQLite가 패턴 연산자를 셋 줘.

  • LIKE 'pat%' — SQL 표준이야. %는 아무 문자열이고 _는 문자 하나야. ASCII A–Z에 대해서는 기본이 대소문자 무시고, ICU를 안 올리면 Unicode는 대소문자를 가려.
  • GLOB 'pat*' — Unix 스타일이야. *는 아무 문자열, ?는 문자 하나, [abc]는 문자 묶음이지. 항상 대소문자를 가리고, 앞부분으로 찾을 때는 LIKE보다 빨라.
  • REGEXP 'pat' — regex extension을 올린 빌드에서만 돼. 피파는 sqlite3_extension_init으로 올려 쓰는데, macOS나 Linux 기본 CLI는 안 올려줘.
Tip: 진짜 텍스트 검색 — row 여러 개를 substring으로 훑고, 순위를 매기고, 언어별로 토큰을 자르는 일 —에는 이 셋 다 맞는 도구가 아니야. 답은 FTS5고 track 5에서 다뤄. LIKE는 작은 테이블에서 WHERE name LIKE 'al%' 정도까지는 괜찮지만, 규모가 커지면 무너져.

Code

LIKE 패턴·sql
SELECT * FROM users WHERE username LIKE 'al%';      -- 'al' 로 시작
SELECT * FROM users WHERE email    LIKE '%@gmail.com'; -- 으로 끝
SELECT * FROM users WHERE username LIKE 'a_ice';      -- 'alice' 또는 'arice'
SELECT * FROM users WHERE email NOT LIKE '%@%';        -- 잘못된 email

-- LIKE 는 ASCII A-Z 에 case-insensitive 기본
SELECT * FROM users WHERE username LIKE 'ALICE';      -- 'alice' 매치
GLOB — Unix 스타일, case-sensitive·sql
SELECT * FROM files WHERE path GLOB '*.py';       -- .py 로 끝
SELECT * FROM files WHERE path GLOB '[A-Z]*';     -- 대문자로 시작

External links

Exercise

TEXT 컬럼이 있는 10,000 row 테이블에서 query 세 개의 시간을 재봐. 인덱스 없이 LIKE 'al%', CREATE INDEX ON t(col)을 걸고 나서 같은 query, 그리고 인덱스가 있는 상태에서 LIKE '%al%'. 인덱스가 어느 query를 돕고 어느 query는 못 돕는지 적어둬. LIKE가 더 이상 맞는 도구가 아니게 되는 지점을 한 단락으로 정리해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.