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

MySQL에서 IN 절에 지정된 순서 그대로 쿼리 결과를 정렬하는 방법

MySQL에서 IN 절에 나열한 값의 순서 그대로 조회 결과를 정렬하고 싶다면, ORDER BY FIELD() 함수를 활용하면 됩니다. 일반적으로 MySQL은 조건에 맞는 행을 임의의 순서로 반환하기 때문에, 원하는 순서를 명시적으로 지정하려면 별도의 처리가 필요합니다.

예제 테이블 생성

먼저 실습용 테이블을 만들어 보겠습니다.

mysql> create table DemoTable
(
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    FirstName varchar(100)
);
Query OK, 0 rows affected (0.64 sec)

데이터 삽입

insert 명령으로 몇 개의 레코드를 추가합니다.

mysql> insert into DemoTable(FirstName) values('Chris');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable(FirstName) values('Robert');
Query OK, 1 row affected (0.08 sec)
mysql> insert into DemoTable(FirstName) values('Mike');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(FirstName) values('Sam');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable(FirstName) values('Carol');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable(FirstName) values('David');
Query OK, 1 row affected (0.42 sec)

저장된 데이터 확인

select 문으로 테이블의 전체 레코드를 조회해 보겠습니다.

mysql> select *from DemoTable;

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

+----+-----------+
| Id | FirstName |
+----+-----------+
|  1 | Chris     |
|  2 | Robert    |
|  3 | Mike      |
|  4 | Sam       |
|  5 | Carol     |
|  6 | David     |
+----+-----------+
6 rows in set (0.00 sec)

IN 절 순서대로 결과 정렬하기

핵심은 FIELD() 함수입니다. 이 함수는 첫 번째 인자로 전달된 값이 이후 인자들 중 어느 위치에 있는지를 반환하므로, 이를 ORDER BY와 함께 사용하면 IN 절에 작성한 순서 그대로 결과를 얻을 수 있습니다.

mysql> select FirstName from DemoTable where Id IN(4,5,6) order by field(Id,4,5,6);

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

+-----------+
| FirstName |
+-----------+
| Sam       |
| Carol     |
| David     |
+-----------+
3 rows in set (0.00 sec)

결과가 Id 기준 오름차순(4, 5, 6)이 아니라, IN 절에 지정한 순서인 4, 5, 6번 순서대로 정확히 반환된 것을 확인할 수 있습니다. 예를 들어 Id IN(6,4,5)처럼 순서를 바꾸어 지정하면 David, Sam, Carol 순으로 출력됩니다. 이 방법은 특정 ID 목록의 우선순위를 유지한 채 데이터를 조회해야 하는 경우에 매우 유용합니다.