MySQL에서 ORDER BY 절을 활용하면 원하는 시작 값부터 레코드를 정렬할 수 있습니다. 예를 들어, ID가 5인 레코드를 가장 먼저 출력하고 이후 나머지 레코드를 순서대로 표시하고 싶다면 비교 연산자와 ORDER BY를 조합하면 됩니다.
1. 샘플 테이블 생성
먼저 데모용 테이블을 생성해 보겠습니다.
mysql> create table DemoTable
(
ClientId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
ClientName varchar(30)
);
Query OK, 0 rows affected (0.74 sec)2. 레코드 삽입
INSERT 명령을 사용하여 테이블에 레코드를 추가합니다.
mysql> insert into DemoTable(ClientName) values('John');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable(ClientName) values('Chris');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable(ClientName) values('Robert');
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable(ClientName) values('David');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable(ClientName) values('Bob');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable(ClientName) values('Carol');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable(ClientName) values('Sam');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable(ClientName) values('Mike');
Query OK, 1 row affected (0.12 sec)3. 전체 레코드 조회
SELECT 문으로 테이블의 모든 레코드를 확인합니다.
mysql> select * from DemoTable;
위 쿼리는 다음과 같은 결과를 출력합니다.
+----------+------------+ | ClientId | ClientName | +----------+------------+ | 1 | John | | 2 | Chris | | 3 | Robert | | 4 | David | | 5 | Bob | | 6 | Carol | | 7 | Sam | | 8 | Mike | +----------+------------+ 8 rows in set (0.00 sec)
4. 특정 시작 값부터 정렬하기
이제 ClientId가 5부터 시작하도록 정렬하는 쿼리입니다. 핵심은 ORDER BY에 불리언 표현식(ClientId < 5)을 먼저 지정하는 것입니다.
mysql> select *from DemoTable order by ClientId < 5,ClientId;
실행 결과는 다음과 같습니다.
+----------+------------+ | ClientId | ClientName | +----------+------------+ | 5 | Bob | | 6 | Carol | | 7 | Sam | | 8 | Mike | | 1 | John | | 2 | Chris | | 3 | Robert | | 4 | David | +----------+------------+ 8 rows in set (0.00 sec)
동작 원리 설명
이 쿼리가 의도대로 작동하는 이유는 다음과 같습니다.
첫 번째 정렬 기준: ClientId < 5 조건은 참(1) 또는 거짓(0)을 반환합니다. MySQL에서 거짓(0)이 참(1)보다 앞에 오므로, ID가 5 이상인 레코드(조건이 거짓인 경우)가 먼저 정렬됩니다.
두 번째 정렬 기준: 첫 번째 기준이 동일한 레코드들끼리는 ClientId 오름차순으로 정렬됩니다. 그 결과 ID 5~8이 먼저 출력되고, 이후 ID 1~4가 순서대로 표시됩니다.
이 방법은 게시판에서 특정 공지글을 상단에 고정하거나, 특정 데이터를 우선적으로 노출해야 하는 경우에도 응용할 수 있습니다.