MySQL에서 ORDER BY 절과 LIKE 연산자를 함께 사용하면, 일반적인 이름순 정렬을 수행하면서도 특정 문자(예: 'J')로 시작하는 문자열만 결과 목록의 맨 끝에 배치할 수 있습니다. 아래에서 단계별로 살펴보겠습니다.
1단계: 테이블 생성
먼저 데모용 테이블을 생성합니다.
mysql> create table DemoTable ( Name varchar(100) ); Query OK, 0 rows affected (0.60 sec)
2단계: 데이터 삽입
INSERT 명령어를 사용해 샘플 레코드를 추가합니다.
mysql> insert into DemoTable values('John');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values('Adam');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('Chris');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('Jace');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('David');
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable values('Sam');
Query OK, 1 row affected (0.20 sec)3단계: 전체 레코드 확인
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+-------+ | Name | +-------+ | John | | Adam | | Chris | | Jace | | David | | Sam | +-------+ 6 rows in set (0.00 sec)
4단계: 'J'로 시작하는 문자열을 맨 끝에 정렬하는 쿼리
ORDER BY를 적용한 상태에서 'J'로 시작하는 문자열을 결과의 마지막에 표시하려면 아래와 같이 쿼리를 작성합니다.
mysql> select *from DemoTable order by Name like '%J%',Name;
실행 결과는 다음과 같습니다.
+-------+ | Name | +-------+ | Adam | | Chris | | David | | Sam | | Jace | | John | +-------+ 6 rows in set (0.00 sec)
동작 원리
Name like '%J%' 조건식은 해당 행이 조건을 만족하면 1, 그렇지 않으면 0을 반환합니다. MySQL은 이 불리언 값을 기준으로 오름차순 정렬할 때 0이 먼저 오고 1이 나중에 오기 때문에, 'J'가 포함되지 않은 행(Adam, Chris, David, Sam)이 먼저 출력되고, 그다음 'J'로 시작하는 행(Jace, John)이 출력됩니다. 즉, 첫 번째 정렬 기준이 그룹을 나누는 역할을 하고, 두 번째 정렬 기준인 Name이 각 그룹 내부에서 이름순으로 순서를 결정합니다.