Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 밑줄(_)이 포함된 문자열을 ORDER BY로 우선 정렬하는 방법

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() 함수를 적용하여 나머지 레코드들은 무작위 순서로 배치됩니다. 이러한 기법은 특정 조건에 부합하는 데이터를 상단에 고정하고 싶을 때 매우 유용하게 활용할 수 있습니다.