본문 바로가기

Languages/SQL

[SQL] 8. 패턴 매칭에 의한 검색

728x90
반응형

0. 패턴 매칭

'LIKE' 술어를 사용하면 문자열의 일부분을 비교하는 부분 검색을 할 수 있다. 이를 활용하여 패턴 매칭으로 검색하는 방법을 알아보자. 

 

= 연산자로 검색하는 경우 셀의 데이터 값이 완전히 동일한지를 비교한다. 즉 = 연산자로는 '특정 문자나 문자열이 포함되어 있는지를 검색'하는 것은 불가능하다. 이러한 검색을 하기 위해서는 'LIKE'를 사용해야 하며 이러한 검색을 '패턴 매칭' 혹은 '부분 검색'이라고 한다. 

 

추가로 간단한 패턴 매칭의 경우 LIKE를 사용하는 것이 효과적이지만 복잡한 패턴 매칭의 경우 정규 표현식을 사용하는 것을 추천한다. 

 

 

1. LIKE로 패턴 매칭하기

= 연산자로 검색할 경우 열 값이 완전히 일치할 때 참이 된다. LIKE 술어를 사용하면 열 값이 부분적으로 일치하는 경우에 참이 된다.

열명 LIKE 패턴

LIKE 술어는 이항 연산자처럼 항목을 지정한다. 왼쪽에는 매칭 대상을 지정하고 오른쪽에는 패턴을 문자열로 지정한다. 단, 수치형 상수는 지정할 수 없다. 패턴을 정의할 때는 "%"와 "_"같은 메타 문자를 사용할 수 있다. '와일드카드'라고 불리는 메타문자는 패턴 매칭 시 '임의의 문자 또는 문자열'에 매치하는 부분을 지정하기 위해 쓰는 특수 문자이다. '%'는 임의의 문자열을 의미하며 '_'는 임의의 문자를 의미한다. 패턴을 정의할 때는 여러 개의 메타문자를 사용할 수 있다.

 

다음은 sample25이다.

sample25에서 text가 SQL로 시작하는 행만 출력해보자.

SELECT * FROM sample25 WHERE text LIKE 'SQL%';

 

이번에는 SQL을 포함하는 행을 출력해보자. SQL을 포함하는 행은 1행과 3행으로 명령어를 맞게 입력했다면 1행과 3행이 출력돼야 한다. 

SELECT * FROM sample25 WHERE text LIKE '%SQL%';

 

핵심은 메타 문자 %가 빈 문자열과도 매치되는 것이다. 1행의 경우 SQL 앞에 문자열이 없음에도 "%SQL%"와 매치되는 것을 확인할 수 있다.

 

"SQL%"을 이용한 검색은 문자열 앞쪽에 지정한 문자와 일치하므로 전방 일치라고 부르면 지정한 문자 뒤로 임의의 문자열이 존재하게 된다. "%SQL%"의 경우는 지정 문자열이 중간에 있기 때문에 중간 일치라고 부르면 지정한 문자 앞 뒤로 임의의 문자열이 존재한다. "%SQL"은 후방 일치로 지정한 문자 앞쪽에 임의의 문자열이 존재한다.

 

 

2. LIKE로 %를 검색하기

sample25의 두 번째 행은 메타 문자인 '%'와 '_'를 포함한다. 메타문자가 포함된 행을 메타문자로 검색하는 방법에 대해 알아보자. 메타 문자를 검색할 때는 WHERE에 들어가는 메타문자와 검색하고자 하는 메타문자를 구분할 필요가 있다. 만약 LIKE로 메타문자를 검색할때는 메타문자 앞에 '\'을 붙여 사용한다. 다음 조건은 '%'문자 앞뒤로 문자열이 오는 행을 의미한다. 

WHERE text LIKE '%\%%';

위 조건을 통해 sample25에서 두 번째 행을 출력해보자.

SELECT * FROM sample25 WHERE text LIKE '%\%%';

 

두 번째 행이 잘 출력되는 것을 확인할 수 있다.

 

 

3. 문자열 상수 '의 이스케이프

메타문자를 검색할 때처럼 문자열 상수를 검색할 때도 같은 문제가 발생한다. 문자열 상수는 '문자열'과 같이 '로 둘러싸 표기한다. 그렇다면 문자열 상수 안에 '를 포함하고자 할 때는 어떻게 해야 할까.

 

표준 SQL에서는 '를 2번 연속해서 쓰는 것으로 처리한다. 예를 들어 'He's'라는 문자열이 있다면 'He''s'로 써서 구분할 수 있다. 만약 문자열이 '하나로만 구성되어 있다면 이는 ''''로 쓸 수 있다.

 

728x90
반응형

'Languages > SQL' 카테고리의 다른 글

[SQL] 10. 복수의 열을 지정해 정렬하기  (0) 2021.05.18
[SQL] 9. 정렬 - ORDER BY  (0) 2021.05.08
[SQL] 7. 여러가지 조건  (0) 2021.03.15
[SQL] 6. 검색 조건  (0) 2021.03.10
[SQL] 5. 테이블 구조 참조하기  (0) 2021.03.02