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

MySQL LIKE 연산자와 등호(=)의 핵심 차이점 완벽 정리

MySQL에서 테이블의 데이터를 조회할 때는 SELECT 명령어를 사용하며, 원하는 레코드만 골라내기 위해 WHERE 절이라는 조건절을 함께 활용할 수 있습니다.

WHERE 절에 등호(=)를 사용하면 값이 정확히 일치하는 경우를 찾을 때 매우 유용합니다. 예를 들어 tutorial_author = 'Sanjay'처럼 조건을 걸 수 있습니다. 하지만 작성자 이름에 'jay'가 포함된 모든 결과를 필터링해야 하는 상황이라면 어떻게 해야 할까요? 이럴 때 MySQL LIKE 연산자를 WHERE 절과 함께 사용하면 됩니다.

와일드카드 없이 LIKE를 사용하면?

흥미로운 점은, LIKE 연산자를 와일드카드 문자 없이 사용하면 WHERE 절과 결합한 등호(=)와 거의 동일하게 작동한다는 것입니다. 아래 예제를 통해 확인해 보겠습니다.

예제 1: LIKE와 = 의 기본 비교

mysql> Select * from Student Where Name LIKE 'Harshit';
+------+---------+---------+----------+--------------------+
| Id   | Name    | Address | Subject  | year_of_admission  |
+------+---------+---------+----------+--------------------+
| 15   | Harshit | Delhi   | Commerce |        2009        |
+------+---------+---------+----------+--------------------+
1 row in set (0.00 sec)

mysql> Select * from Student Where Name = 'Harshit';
+------+---------+---------+----------+--------------------+
| Id   | Name    | Address | Subject  | year_of_admission  |
+------+---------+---------+----------+--------------------+
| 15   | Harshit | Delhi   | Commerce |        2009        |
+------+---------+---------+----------+--------------------+
1 row in set (0.00 sec)

두 쿼리 모두 동일한 결과를 반환하는 것을 볼 수 있습니다.

결정적인 차이점: 후행 공백(Trailing Spaces) 처리

와일드카드 문자인 %(퍼센트)와 _(언더스코어)의 사용 여부 외에도, LIKE와 = 연산자 사이에는 중요한 차이가 하나 더 있습니다.

  • = 연산자: 문자열 끝의 공백(후행 공백)을 무시하고 비교합니다.
  • LIKE 연산자: 후행 공백을 무시하지 않고 그대로 비교 대상에 포함시킵니다.

즉, 검색 조건 문자열 끝에 불필요한 공백이 포함되어 있으면 두 연산자의 결과가 달라질 수 있습니다. 다음 예제를 살펴보겠습니다.

예제 2: 후행 공백이 있을 때의 차이

mysql> Select * from Student Where Name = 'Harshit ';
+------+---------+---------+----------+--------------------+
| Id   | Name    | Address | Subject  | year_of_admission  |
+------+---------+---------+----------+--------------------+
| 15   | Harshit | Delhi   | Commerce |        2009        |
+------+---------+---------+----------+--------------------+
1 row in set (0.00 sec)

mysql> Select * from Student Where Name LIKE 'Harshit ';
Empty set (0.00 sec)

'Harshit '처럼 이름 뒤에 공백이 붙은 조건으로 검색했을 때, = 연산자는 공백을 무시하고 정상적으로 결과를 반환하지만, LIKE 연산자는 공백까지 포함해 정확히 일치해야 하므로 빈 결과(Empty set)를 반환합니다.

정리

두 연산자를 선택할 때는 다음 사항을 기억하면 좋습니다.

  • 부분 일치 검색이 필요하면 LIKE + 와일드카드(% , _)를 사용합니다.
  • 정확한 일치 검색이라면 = 연산자가 적합하며, 성능 면에서도 일반적으로 더 유리합니다.
  • 입력값에 후행 공백이 섞여 있을 가능성이 있다면, = 과 LIKE의 결과가 달라질 수 있음을 유의해야 합니다.