패턴 매칭에 의한 검색

유석현(SeokHyun Yu)·2022년 8월 7일
0

SQL

목록 보기
8/45
post-thumbnail

서론

= 연산자로 검색하는 경우는 셀의 데이터 값이 완전히 동일한지를 비교한다.

하지만 '특정 문자나 문자열이 포함되어 있는지를 검색하고 싶은' 경우도 있다.

이런 경우 사용하는 방법으로 '패턴 매칭(또는 부분 검색)'이 있다.


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%';

profile
Backend Engineer

0개의 댓글