mysql where 절 좌항을 합성하기

들어가며

  • 칼럼에 address와 address_detail이 있다.
  • ‘홍은동’으로 검색하거나 ‘현대아파트’로 검색할 경우 address like #{adress} or address_detail #{addressDetail} 로 검색하면 된다.
  • 하지만 ‘홍은동 현대아파트’라고 검색하면 위의 방법으로 동작하지 않는다. 문자열을 자르는 기준을 마련하는 것도 어렵다.
  • 클라이언트에게 address와 address_detail을 분리하여 검색하도록 유도하는 것이다. 만약 이것이 불가능 할 경우 어떻게 할까?
  • 이를 해소하는 방법은 아래와 같다.

where 절의 좌항을 합성하기

  • concat으로 해결한다. where 절에서도 concat은 동작한다.
  • 합성 시 가운데 스페이스바가 들어가도록 하였다. 검색할 때 마찬가지로 가운데에 스페이스바가 들어가야 한다.
select *
from student
where concat(address,' ', address_detail) like '%홍은동 현대아파트%';

좋은 방법이라 생각하지는 않는다

  • 테스트는 하지 않았지만 성능 상 문제가 있을 것으로 예상된다.
  • 좌항을 조작하면 db는 모든 레코드에 대하여 해당 내용에 맞춘 칼럼을 가진 새로운 임시 테이블을 생성한다. 이 경우 해당 테이블 모든 레코드의 address 와 address_detail가 CONCAT(ADDRESS,' ', ADDRESS_DETAIL) 형태로 합성된 칼럼이 있는 임시 테이블을 생성할 것이다. 그 후 where 절을 수행한다.