LIKE 연산자로 같은 행의 부분 문자열 확인하기
동일한 행에 있는 두 개의 컬럼 값을 서로 비교해야 하는 경우에는 LIKE 연산자와 CONCAT() 함수를 함께 사용하면 됩니다. 예를 들어, FirstName 값이 같은 행의 FullName 문자열 안에 포함되어 있는지 확인하고 싶다면 아래의 과정을 따라 해 보세요.
1. 테이블 생성
먼저 데모용 테이블을 생성합니다.
mysql> create table DemoTable
(
FirstName varchar(100),
FullName varchar(100)
);
Query OK, 0 rows affected (0.53 sec)2. 샘플 데이터 삽입
INSERT 명령을 사용하여 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable values('John','John Smith');
Query OK, 1 row affected (0.08 sec)
mysql> insert into DemoTable values('David','John Miller');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('Bob','Sam Miller');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values('Chris','Chris Brown');
Query OK, 1 row affected (0.10 sec)3. 전체 레코드 조회
SELECT 문으로 테이블의 모든 레코드를 확인합니다.
mysql> select *from DemoTable;
위 쿼리는 다음과 같은 결과를 출력합니다.
+-----------+-------------+ | FirstName | FullName | +-----------+-------------+ | John | John Smith | | David | John Miller | | Bob | Sam Miller | | Chris | Chris Brown | +-----------+-------------+ 4 rows in set (0.00 sec)
4. 같은 행의 값 포함 여부 확인 쿼리
문자열이 같은 행의 특정 값을 포함하고 있는지 확인하려면 아래와 같이 CONCAT() 함수를 사용해 와일드카드(%)를 양쪽에 붙인 패턴을 만들어 비교합니다.
mysql> select FirstName,FullName from DemoTable
where FullName LIKE concat('%', FirstName, '%');실행 결과는 다음과 같습니다.
+-----------+-------------+ | FirstName | FullName | +-----------+-------------+ | John | John Smith | | Chris | Chris Brown | +-----------+-------------+ 2 rows in set (0.00 sec)
결과 분석
결과를 보면 John Smith에는 'John'이 포함되어 있고, Chris Brown에는 'Chris'가 포함되어 있기 때문에 이 두 행만 조회되었습니다. 반면 'David'는 John Miller에 포함되어 있지 않고, 'Bob' 역시 Sam Miller에 포함되어 있지 않으므로 결과에서 제외되었습니다.
이처럼 CONCAT('%', 컬럼명, '%') 패턴을 활용하면 별도의 저장 프로시저나 애플리케이션 로직 없이도 SQL 쿼리 하나만으로 같은 행 내 문자열 포함 여부를 손쉽게 검사할 수 있습니다.