MySQL에서 특정 패턴(예: 밑줄이 포함된 문자열)에 일치하는 레코드를 우선적으로 정렬하고 싶다면 ORDER BY 절과 LIKE 연산자를 함께 활용할 수 있습니다. 이번 글에서는 예제를 통해 그 방법을 단계별로 살펴보겠습니다.
1. 테이블 생성
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable
(
Name varchar(100)
);
Query OK, 0 rows affected (0.60 sec)2. 레코드 삽입
INSERT 명령을 사용하여 테이블에 데이터를 입력합니다.
mysql> insert into DemoTable values('John_Smith');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values('Chris Brown');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('John_Doe');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values('David Miller');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('Carol Taylor');
Query OK, 1 row affected (0.13 sec)3. 전체 레코드 조회
SELECT 문으로 테이블의 모든 레코드를 확인합니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+--------------+ | Name | +--------------+ | John_Smith | | Chris Brown | | John_Doe | | David Miller | | Carol Taylor | +--------------+ 5 rows in set (0.00 sec)
4. 밑줄이 포함된 문자열 기준 정렬 쿼리
이름에 밑줄이 포함된 특정 패턴의 레코드를 우선적으로 정렬하려면 아래와 같은 쿼리를 사용합니다.
mysql> select *from DemoTable order by (Name LIKE 'John_%') DESC,rand();
실행 결과:
+--------------+ | Name | +--------------+ | John_Doe | | John_Smith | | Carol Taylor | | David Miller | | Chris Brown | +--------------+ 5 rows in set (0.42 sec)
쿼리 동작 원리
(Name LIKE 'John_%') 조건은 값이 해당 패턴과 일치하면 1, 일치하지 않으면 0을 반환합니다. 이 불리언 값을 DESC로 내림차순 정렬하면 'John_Doe', 'John_Smith'처럼 밑줄이 포함되어 패턴에 일치하는 레코드가 항상 맨 앞에 위치하게 됩니다. 이후 rand() 함수를 적용하여 나머지 레코드들은 무작위 순서로 배치됩니다. 이러한 기법은 특정 조건에 부합하는 데이터를 상단에 고정하고 싶을 때 매우 유용하게 활용할 수 있습니다.