76 lines
4.0 KiB
Markdown
76 lines
4.0 KiB
Markdown
# 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)`을 사용하는 편이 낫다.
|
|
- 정규 표현식에서는 더 많은 메타문자를 사용해서 폭넓게 패턴을 지정할 수 있다.
|
|
|
|
--- |