개요
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 없이도 원하는 레코드를 손쉽게 최상단에 배치할 수 있습니다.