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 절을 수행한다.