서론
=
연산자로 검색하는 경우는 셀의 데이터 값이 완전히 동일한지를 비교한다.
하지만 '특정 문자나 문자열이 포함되어 있는지를 검색하고 싶은'
경우도 있다.
이런 경우 사용하는 방법으로 '패턴 매칭(또는 부분 검색)'
이 있다.
1. LIKE로 패턴 매칭하기
= 연산자로 검색할 경우에는 열 값이 완전히 일치할 때 참이 된다.
하지만 LIKE
술어를 사용하면 열 값이 부분적으로 일치하는 경우
에도 참이 된다.
LIKE 술어는 이항 연산자처럼 항목을 지정한다.
왼쪽에는 매칭 대상이 되는 열
을 지정하고 오른쪽에는 패턴
을 문자열로 지정한다.
패턴을 정의할 때는 다음과 같은 메타문자를 사용할 수 있다.
%
_
'와일드카드'라고도 불리는 메타문자는 패턴 매칭 시 '임의의 문자 또는 문자열'에 매치하는 부분을 지정하기 위해 쓰이는 특수 문자이다.
퍼센트(%)
는 임의의 문자열
을 의미하며, 언더스코어(_)
는 임의의 문자 하나
를 의미한다.
패턴을 정의할 때는 메타문자를 여러 개 사용할 수 있다.
한편 메타문자를 전혀 정의하지 않아도 문제는 없지만, = 연산자를 사용했을 때와 같이 완전 일치
로 검색되므로 정의하는 의미가 없다.
보통 LIKE로 패턴 매칭시 3가지 방식이 있는데, 아래에 각 3가지 방식의 SQL 명령과 그에 따른 실행 결과를 첨부해놓았다.
SELECT * FROM sample_table WHERE text LIKE 'SQL%';
SELECT * FROM sample_table WHERE text LIKE '%SQL';
SELECT * FROM sample_table WHERE text LIKE '%SQL%';
2. LIKE로 % 검색하기
LIKE로 %
와 _
같은 메타문자를 검색하고 싶다면 어떻게 해야될까?
SELECT * FROM sample_table WHERE text LIKE '%%%';
이렇게 검색하면 된다고 생각할 수도 있지만 틀린 방법이다.
프로그래밍 세계에서는 이러한 문제를 '이스케이프'
라는 방법으로 처리한다.
LIKE로 %를 검색하는 경우에는 '\%'
와 같이 \
를 %
앞에 붙인다.
SELECT * FROM sample_table WHERE text LIKE '%\%%';
SELECT * FROM sample_table WHERE text LIKE '%\_%';
3. 문자열 상수 '의 이스케이프
메타문자를 검색할 때처럼 문자열 상수
를 검색할 때도 같은 문제가 발생한다.
문자열 상수는 '
로 둘러싸 표기한다.
그렇다면, 문자열 상수 안에 '를 포함하고 싶을 경우에는 어떻게 해야 할지 알아보자.
표준 SQL에서는 '를 2개 연속
해서 기술하는 것으로 이스케이프 처리를 할 수 있다.
예를 들면 It's
라는 문자열을 문자열 상수로 표기하면 It''s
로 쓴다.
SELECT * FROM sample_table WHERE text LIKE '%It''s%';