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

MySQL에서 특정 필드만 우선 정렬하고 나머지 레코드는 원래 순서대로 표시하는 방법

개요

MySQL에서 특정 레코드(예: Id가 101인 행)를 맨 위로 정렬하면서 나머지 레코드들은 기존 순서 그대로 유지하고 싶은 경우가 있습니다. 이는 ORDER BY 절에 조건식을 활용하면 간단하게 구현할 수 있습니다. 아래 예제와 함께 단계별로 살펴보겠습니다.

1. 테이블 생성

먼저 예제로 사용할 테이블을 생성합니다.

mysql> create table DemoTable
   -> (
   -> Id int,
   -> Name varchar(20)
   -> );
Query OK, 0 rows affected (0.82 sec)

2. 데이터 삽입

INSERT 명령어를 사용하여 테이블에 레코드를 추가합니다.

mysql> insert into DemoTable values(201,'Chris Brown');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values(110,'John Doe');
Query OK, 1 row affected (0.29 sec)
mysql> insert into DemoTable values(101,'Adam Smith');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values(345,'Carol Taylor');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values(135,'John Smith');
Query OK, 1 row affected (0.11 sec)

3. 전체 레코드 조회

SELECT 문으로 테이블의 모든 레코드를 확인합니다.

mysql> select *from DemoTable;

실행 결과는 다음과 같습니다.

+------+--------------+
| Id   | Name          |
+------+--------------+
|  201 | Chris Brown  |
|  110 | John Doe     |
|  101 | Adam Smith   |
|  345 | Carol Taylor |
|  135 | John Smith   |
+------+--------------+
5 rows in set (0.00 sec)

4. 특정 필드 우선 정렬 쿼리

이제 Id가 101인 레코드를 맨 위로 올리고, 나머지 레코드는 기존 순서대로 유지하는 쿼리입니다. 핵심은 ORDER BY 절에서 (Id=101)이라는 불리언 표현식을 내림차순(desc)으로 정렬하는 것입니다. MySQL에서는 조건이 참이면 1, 거짓이면 0을 반환하기 때문에 참(1)에 해당하는 레코드가 자동으로 맨 앞에 배치됩니다.

mysql> select *from DemoTable
   -> order by (Id=101) desc;

실행 결과는 다음과 같습니다.

+------+--------------+
| Id   | Name          |
+------+--------------+
| 101  | Adam Smith   |
| 201  | Chris Brown  |
| 110  | John Doe     |
| 345  | Carol Taylor |
| 135  | John Smith   |
+------+--------------+
5 rows in set (0.00 sec)

결과 분석

위 출력 결과를 보면 Id 101(Adam Smith)이 첫 번째 행으로 이동한 것을 확인할 수 있으며, 나머지 레코드들은 삽입된 순서 그대로 유지되었습니다. 이처럼 ORDER BY 절에 조건식을 사용하면 별도의 서브쿼리나 UNION 없이도 원하는 레코드를 손쉽게 최상단에 배치할 수 있습니다.