MySQL ORDER BY 절로 특정 값을 기준으로 정렬하기
MySQL에서 조회 결과를 정렬할 때는 ORDER BY 절을 사용합니다. 일반적인 오름차순·내림차순 정렬뿐만 아니라, 조건식을 함께 활용하면 특정 값을 맨 앞에 표시하고 나머지 데이터를 원하는 순서로 정렬할 수도 있습니다.
이번 글에서는 예제 테이블을 만들고, 특정 학생 ID(70)를 가장 먼저 출력한 뒤 나머지 ID를 오름차순으로 정렬하는 방법을 단계별로 살펴보겠습니다.
1. 테이블 생성하기
먼저 CREATE TABLE 문으로 예제 테이블을 생성합니다.
mysql> create table DemoTable
(
StudentId int
);
Query OK, 0 rows affected (0.59 sec)2. 데이터 삽입하기
INSERT 명령어를 사용해 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable values(100); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable values(60); Query OK, 1 row affected (0.15 sec) mysql> insert into DemoTable values(70); Query OK, 1 row affected (0.13 sec) mysql> insert into DemoTable values(45); Query OK, 1 row affected (0.24 sec) mysql> insert into DemoTable values(55); Query OK, 1 row affected (0.13 sec) mysql> insert into DemoTable values(78); Query OK, 1 row affected (0.14 sec)
3. 전체 레코드 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
출력 결과
+-----------+ | StudentId | +-----------+ | 100 | | 60 | | 70 | | 45 | | 55 | | 78 | +-----------+ 6 rows in set (0.00 sec)
현재 데이터는 삽입된 순서 그대로 저장되어 있으며, 특별한 규칙 없이 섞여 있는 상태입니다.
4. ORDER BY로 특정 값 우선 정렬하기
다음은 ORDER BY를 사용해 값 70을 가장 먼저 표시하고, 나머지 ID는 오름차순으로 정렬하는 쿼리입니다.
mysql> select *from DemoTable order by StudentId=70 desc,StudentId asc;
출력 결과
+-----------+ | StudentId | +-----------+ | 70 | | 45 | | 55 | | 60 | | 78 | | 100 | +-----------+ 6 rows in set (0.00 sec)
동작 원리 이해하기
이 쿼리가 작동하는 핵심은 StudentId=70이라는 조건식입니다. MySQL에서 비교 연산식은 참일 때 1, 거짓일 때 0을 반환합니다.
StudentId=70이 참인 행(70)은 1을 반환하므로, 내림차순(desc) 정렬 시 가장 앞에 위치합니다.- 나머지 행은 모두 0을 반환하므로 동일한 그룹으로 묶이고, 두 번째 정렬 기준인
StudentId asc에 따라 오름차순으로 정렬됩니다.
참고: CASE 표현식으로 여러 값 우선순위 지정하기
우선순위를 줄 값이 여러 개라면 CASE 표현식을 사용하는 것이 더 명확합니다.
mysql> select *from DemoTable
-> order by case StudentId when 70 then 0 when 45 then 1 else 2 end, StudentId asc;이처럼 ORDER BY 절에 조건식이나 CASE 표현식을 조합하면, 단순한 오름차순·내림차순을 넘어 비즈니스 로직에 맞는 유연한 커스텀 정렬을 손쉽게 구현할 수 있습니다.