본문 바로가기
CS/DataBase

데이터베이스 첫걸음 정리 - 8장. 패턴 매칭에의한 검색

by yongckim 2022. 8. 29.
728x90
반응형

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

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

이런 경우 LIKE를 사용하여 패턴 매칭으로 검색할 수 있습니다.

LIKE로 패턴 매칭하기

LIKE를 사용하면 열 값이 부분적으로 일치하는 경우에도 참이 됩니다.

열 LIKE 패턴

LIKE는 이항 연산자 처럼 항목을 지정합니다. 왼쪽에는 매칭 대상을 지정하고 오른쪽에는 패턴을 문자열로 지정합니다.

단, 수치형 상수는 지정할 수 없으며 패턴을 정의할 때 다음과 같은 메타문자를 사용할 수 있습니다.

% _

“와일드 카드"라고 불리는 메타문자는 패턴 매칭시 임의의 문자 또는 문자열에 매치하는 부분을 지정하기 위해 쓰이는 특수 문자입니다.

퍼센트(%)는 임의의 문자열을 의미하며 언더스코어(_)는 임의의 문자 하나를 의미합니다.

패턴을 정의할때는 메타문자를 여러개 사용할 수 있습니다.

물론, 메타문자를 사용하지 않아도 문제는 없지만 완전히 일치하는 문자열만 검색되기 때문에 LIKE를 사용하는 의미가 없습니다.

 

💡 참고로 와일드카드로 자주 사용되는 *는 LIKE에서는 사용할 수 없습니다.

 

다음은 LIKE로 패턴매칭 검색 예시입니다.

SELECT * FROM Customers WHERE CustomerName LIKE 'A%';

위의 결과를 보면 A로 시작하는 CustomerName만 잘 가져온 것을 확인할 수 있습니다.

만약 A가 들어가는 이름을 전부 가져오고 싶다면 다음과 같이 사용하면 됩니다.

SELECT * FROM Customers WHERE CustomerName LIKE '%A%';

위와 같이 A가 포함된 이름은 전부 출력되는 것을 확인할 수 있습니다.

%는 임의의 문자열과 매치하며 빈문자열에도 매치한다는 사실을 기억해둡시다.

전방일치, 중간일치, 후방일치

  • XXX%와 같은 검색은 문자열 앞쪽에 지정한 문자와 일치하므로 전방일치라고 부릅니다.
  • %XXX%와 같은 검색은 지정 문자열이 중간에 있기 때문에 중간 일치라고 부릅니다.
  • %XXX와 같은 검색은 문자열이 뒤쪽에 지정한 문자와 일치하므로 후방일치라고 부릅니다.

LIKE로 %를 검색하기

만약 데이터에 %나 _와 같은 메타문자가 존재한다면 어떻게할까요?

LIKE에서는 %의 경우 임의의 문자열을 뜻하기 때문에 %를 검색 조건으로 지정할때는 해당 문자가 “%”문자라는 구분이 필요합니다.

이런 경우 “이스케이프"라는 방법을 사용하여 해결할 수 있습니다.

LIKE로 %를 검색하는 경우에는 \%와 같이 앞에 백슬래시(\)를 붙여 %를 일반문자로 표현할 수 있습니다.

다음은 %를 포함한 문자열을 검색하는 조건식입니다.

WHERE text LIKE '%\%%';

%가 연속적으로 나오기 때문에 알아보기 힘들 수도 있지만 나열된 순서에 따라 확인해보면 쉽게 이해할 수 있습니다.

문자열 상수 의 이스케이프

메타문자를 검색할 때 처럼 문자열 상수를 검색할 때도 같은 문제가 발생합니다.

문자열 상수는 ‘문자열’과 같이 ‘로 둘러싸 표기합니다.

이를 해결하기 위해 표준 SQL에서는 ‘를 2개 연속하게 쓰는 것으로 이스케이프 처리를 할 수 있습니다.

예를 들어 ‘It’s’라는 문자열을 문자열 상수로 표기하면 ‘It’’s’로 씁니다.

또한 ‘ 하나만 문자열 데이터일 경우에는 ‘’’’ 로 쓰면 됩니다.

SQL 뿐만 아니라 프로그래밍 언어에서는 시작과 끝이 구분되지 않으면 에러가 발생합니다.

SQL에서는 싱글쿼트로 문자열 상수를 기술하는데 시작의 ‘과 끝의 ‘이 정확하게 표기되지 않으면 에러가 발생하므로 주의해야 합니다.

지금까지 LIKE에 의한 패턴 매칭에 관해 알아보았습니다. 패턴 매칭을 하는 방법으로 LIKE를 사용하면 간단한 패턴은 쉽게 처리할 수 있지만 복잡한 패턴을 매칭하는 경우에는 정규 표현식을 사용할 수도 있습니다.

반응형