# 08강. 패턴 매칭에 의한 검색 - `LIKE` 술어를 사용하면 문자열의 일부분을 비교하는 `부분 검색`을 할 수 있다. **`LIKE`** ``` 열 LIKE 패턴 ``` - `특정 문자나 문자열이 포함되어 있는지를 검색하고 싶은` 경우에 사용하는 방법이다. - `패턴 매칭` 또는 `부분 검색`이라고도 한다. --- ## 1. LIKE로 패턴 매칭하기 - `LIKE` 술어를 사용하면 열 값이 부분적으로 일치하는 경우에도 참이 된다. **`LIKE`** ``` 열명 LIKE '패턴' ``` - `LIKE` 술어는 이항 연산자처럼 항목을 지정한다. - 왼쪽에는 매칭 대상을 지정하고 오른쪽에는 패턴을 문자열로 지정한다. - 단, 수치형 상수는 지정할 수 없다. - 패턴을 정의할 때는 `%_`과 같은 `메타문자`를 사용할 수 있다. - `와일드카드`라고도 불리는 메타문자는 패턴 매칭 시 `임의의 문자 또는 문자열`에 매치하는 부분을 지정하기 위해 쓰이는 `특수문자`이다. - `퍼센트(%)`는 임의의 문자열을 의마하며, `언더스코어(_)`는 임의의 문자 하나를 의미한다. - 패턴을 정의할 때는 메타문자를 여러 개 사용할 수 있다. - 메타문자를 전혀 정의하지 않아도 문제는 없지만, 완전 일치로 검색되므로 의미가 없다. - 와일드카드로 자주 쓰이는 `*`는 `LIKE`에서는 사용할 수 없다. ##### LIKE 술어를 사용하여 패턴 매칭으로 검색할 수 있다! ##### 패턴을 정의할 때 사용할 수 있는 메타문자로는 %와 _이 있다! - 메타문자 패턴은 `%SQL`, `%SQL%`, `SQL%` 의 형식으로 사용된다. ##### %는 임의의 문자열과 매치하며, 빈 문자열에도 매치한다! - `SQL%`을 이용한 검색은 문자열 앞쪽에 지정한 문자와 일치하므로 `전방 일치`라고 부르며, 지정한 문자 뒤로 임의의 문자열이 존재하게 된다. - `%SQL%`의 경우는 지정 문자열이 중간에 있기 때문에 `중간 일치`라고 부르며 지정한 문자 앞뒤로 임의의 문자열이 존재한다. - 마찬가지로 `%SQL`의 경우에는 `후방 일치`라고 하며, 앞쪽에 임의의 문자열이 존재한다. --- ## 2. LIKE로 %를 검색하기 - `LIKE`에서는 메타문자 부분이 임의의 문자열을 의미하므로, `%` 자신을 검색조건으로 지정할 때는 `WHERE text LIKE %%%`로도 매치하지 않기 때문에 구분할 필요가 있다. - 이러한 문제를 `이스케이프`라는 방법으로 처리할 수 있다. - `LIKE`로 `%`를 검색하는 경우에는 `\%`와 같이 `\`을 `%` 앞에 붙인다. - 결국 `%`를 포함하는 데이터를 검색하고 싶을 경우 조건식은 `WHERE text LIKE '%\%%'`와 같다. ##### %를 LIKE로 검색할 경우에는 \%로 한다! ##### _를 LIKE로 검색할 경우에는 \_로 한다! --- ## 3. 문자열 상수 '의 이스케이프 - 메타문자를 검색할 때처럼 문자열 상수를 검색할 때도 같은 문제가 발생한다. - 문자열 상수 안에 `'`를 포함하고 싶을 경우, `표준 SQL`에서는 `'`를 2개 연속해서 기술하는 것으로 이스케이프 처리를 할 수 있다. - 예를 들어 `'It's'`라는 문자열을 문자열 상수로 표기하면 `'It''s'`로 쓴다. - 또한 `'` 하나만 문자열 데이터일 경우에는 `''''`으로 쓰면 된다. **`문자열 상수 안에 ' 기술하기`** ``` It's -> 'It''s' ' -> '''' ``` - SQL에서는 싱글쿼트로 문자열 상수를 기술하는데 시작의 `'`과 끝의 `'`이 정확하게 표기되지 않으면 에러가 발생하므로 주의해야 한다. ##### '을 문자열 상수 안에 포함할 경우는 '를 2개 연속해서 기술한다! - 간단한 패턴 매칭이라면 `LIKE`로 충분하다. - 복잡한 패턴을 매칭하는 경우는 `정규 표현식(Regular Expression)`을 사용하는 편이 낫다. - 정규 표현식에서는 더 많은 메타문자를 사용해서 폭넓게 패턴을 지정할 수 있다. ---