데이터베이스에서 유용한 정보를 조회하고 도출하기 위해 활용할 수 있는 SQL 문과 함수는 매우 다양합니다. 그중 하나가 바로 CONTAINS() 함수입니다. 이 함수는 표준 SQL 함수가 아니기 때문에, 어떤 데이터베이스를 사용하느냐에 따라 동작 방식이 달라진다는 점에 유의해야 합니다. 이 글에서는 Microsoft SQL Server를 기준으로 CONTAINS() 함수를 자세히 살펴보고, 다른 데이터베이스에서는 어떻게 차이가 나는지도 함께 알아보겠습니다.
CONTAINS() 함수의 기본 사용법과 문법
CONTAINS() 함수는 핵심적으로 하나의 부분 문자열(substring)을 입력받아, 다른 문자열 안에 해당 부분 문자열이 존재하는지 검색하는 역할을 합니다. Microsoft SQL Server에서 CONTAINS()는 테이블을 대상으로 전체 텍스트(full-text) 패턴 매칭 검색 쿼리를 수행할 수 있게 해주며, 조건이 참인지 거짓인지를 나타내는 불리언(Boolean) 값을 반환합니다.
SELECT <columnName> FROM <yourTable> WHERE CONTAINS (<columnName>, '<yourSubstring>');
<>로 감싸진 부분은 모두 사용자가 직접 지정하는 이름입니다. 검색할 부분 문자열은 따옴표 사이에 넣으며, 컬럼 이름은 테이블을 생성할 때 설정한 이름을 그대로 사용하면 됩니다.
CREATE TABLE MyTable
([name] varchar(26), [occupation] varchar(57))
;
INSERT INTO MyTable
([name], [occupation])
VALUES
('User 1', 'Web Developer'),
('User 2', 'Musician'),
('User 3', 'Doctor')
;
SELECT name, occupation FROM myTable WHERE CONTAINS (name, 'User');
테이블이 전체 텍스트 인덱스(full-text index)로 설정되어 있다면 위 쿼리를 실행할 수 있습니다. 이 검색 방식은 부분 문자열 패턴을 통째로 일치시키기 때문에, 오탈자나 동의어는 찾아주지 않는다는 점을 기억하세요.
전체 텍스트 인덱싱이 어렵다면? LIKE 절 활용하기
데이터베이스를 전체 텍스트 인덱싱으로 설정하는 방법이 익숙하지 않다면, SQL의 LIKE 절을 사용해 보세요. LIKE 절은 CONTAINS와 비슷한 역할을 하지만, 별도의 설정 없이 바로 사용할 수 있어 훨씬 간편합니다.
SELECT
name,
occupation
FROM
MyTable
WHERE name LIKE 'User%';
'User' 뒤에 붙은 %는 'User' 이후의 모든 문자를 의미합니다. 따라서 위 코드는 아래와 같은 결과를 반환합니다.
| name | occupation |
| User 1 | Web Developer |
| User 2 | Musician |
| User 3 | Doctor |
데이터베이스별 CONTAINS 함수의 차이점
각 데이터베이스는 CONTAINS 함수를 서로 다른 방식으로 구현하고 있습니다. 예를 들어, SQL Server에서 CONTAINS가 의미하는 바가 PostgreSQL에서의 의미와 반드시 같지는 않습니다. 따라서 함수를 사용하기 전에 반드시 사용 중인 데이터베이스의 특성을 확인하는 것이 좋습니다.
참고로, 개발 분야로의 커리어 전환을 고려하고 있다면 부트캠프도 좋은 선택지가 될 수 있습니다. 부트캠프 참가자의 81%가 수료 후 기술 분야 취업 전망에 대해 더 큰 자신감을 느꼈다고 답했으며, 평균적으로 6개월 이내의 기간에 경력 전환을 마치고 첫 직장을 찾았습니다.
더 자세한 내용은 사용 중인 데이터베이스의 공식 문서를 확인하시기 바랍니다. LIKE 절에 대한 추가 정보는 Career Karma의 James Gallagher가 작성한 관련 블로그 글을 참고하면 도움이 됩니다.