Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 SOUNDEX() 함수를 활용해 발음이 비슷한 데이터를 조회하는 방법

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()는 영어 발음 규칙에 기반한 알고리즘이므로 한글 데이터에는 적합하지 않으며, 대량의 데이터에서는 인덱스를 활용하지 못해 성능 저하가 발생할 수 있다는 점도 함께 고려하시기 바랍니다.