SOUNDEX() 함수란 무엇인가?
MySQL의 SOUNDEX() 함수는 문자열에 대한 사운덱(soundex) 코드를 반환하는 함수입니다. 사운덱은 영어 이름 등의 단어를 발음 기준으로 인코딩하는 알고리즘으로, 발음이 서로 비슷한 두 문자열은 동일한 사운덱 값을 갖게 됩니다. 이러한 특성 덕분에 철자는 다르지만 발음이 유사한 데이터를 검색할 때 매우 유용하게 활용됩니다.
SOUNDEX() 쿼리 기본 문법
MySQL에서 SOUNDEX()를 사용해 데이터를 조회하려면 아래와 같은 구문을 사용합니다.
SELECT * FROM yourTableName WHERE SOUNDEX(yourValue) = SOUNDEX(yourColumnName);
조회하고자 하는 값과 컬럼의 값 각각에 SOUNDEX()를 적용한 뒤, 두 결과가 일치하는 행만 필터링하는 방식입니다.
실습 예제로 배우는 SOUNDEX()
1단계: 테이블 생성하기
먼저 실습에 사용할 테이블을 생성합니다.
mysql> CREATE TABLE DemoTable
(
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
FirstName VARCHAR(20),
LastName VARCHAR(20)
);
Query OK, 0 rows affected (0.28 sec)2단계: 샘플 데이터 삽입하기
INSERT 명령을 사용해 테이블에 여러 개의 레코드를 추가합니다.
mysql> INSERT INTO DemoTable(FirstName, LastName) VALUES('Adam', 'Smith');
Query OK, 1 row affected (0.04 sec)
mysql> INSERT INTO DemoTable(FirstName, LastName) VALUES('David', 'Miller');
Query OK, 1 row affected (0.07 sec)
mysql> INSERT INTO DemoTable(FirstName, LastName) VALUES('Carol', 'Taylor');
Query OK, 1 row affected (0.06 sec)
mysql> INSERT INTO DemoTable(FirstName, LastName) VALUES('Chris', 'Brown');
Query OK, 1 row affected (0.06 sec)
mysql> INSERT INTO DemoTable(FirstName, LastName) VALUES('John', 'Smith');
Query OK, 1 row affected (0.07 sec)3단계: 저장된 데이터 확인하기
SELECT 문으로 테이블의 전체 레코드를 조회해 보겠습니다.
mysql> SELECT * FROM DemoTable;
실행 결과는 다음과 같습니다.
+----+-----------+----------+ | Id | FirstName | LastName | +----+-----------+----------+ | 1 | Adam | Smith | | 2 | David | Miller | | 3 | Carol | Taylor | | 4 | Chris | Brown | | 5 | John | Smith | +----+-----------+----------+ 5 rows in set (0.00 sec)
SOUNDEX()를 적용한 조회 쿼리 실행하기
이제 'Smith'라는 값과 성(LastName)의 사운덱 값이 일치하는 행을 찾아보겠습니다.
mysql> SELECT * FROM DemoTable WHERE SOUNDEX('Smith') = SOUNDEX(LastName);위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
+----+-----------+----------+ | Id | FirstName | LastName | +----+-----------+----------+ | 1 | Adam | Smith | | 5 | John | Smith | +----+-----------+----------+ 2 rows in set (0.00 sec)
정리 및 활용 팁
실행 결과에서 확인할 수 있듯이, LastName이 'Smith'인 두 개의 행이 정상적으로 조회되었습니다. 이처럼 SOUNDEX() 함수는 다음과 같은 상황에서 특히 유용합니다.
- 사용자가 이름을 잘못 입력했을 가능성이 있는 검색 기능
- 철자 오류나 변형된 표기를 포함해 유사한 발음의 데이터를 찾아야 하는 경우
- 영어권 이름·지명 등의 퍼지(fuzzy) 매칭 검색
다만 SOUNDEX()는 영어 발음 규칙에 기반한 알고리즘이므로 한글 데이터에는 적합하지 않으며, 대량의 데이터에서는 인덱스를 활용하지 못해 성능 저하가 발생할 수 있다는 점도 함께 고려하시기 바랍니다.