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

MySQL IN() 쿼리에서 원하는 순서로 결과 정렬하기 – ORDER BY와 FIND_IN_SET() 활용법

MySQL에서 IN() 조건을 사용하면 지정한 필드 기준으로 결과가 자동으로 정렬되어 반환됩니다. 만약 IN()에 나열한 값의 순서 그대로 결과를 유지하고 싶다면, ORDER BY 절과 FIND_IN_SET() 함수를 함께 사용하면 됩니다.

이번 글에서는 예제 테이블을 만들고, FIND_IN_SET()을 활용해 원하는 순서대로 결과를 조회하는 방법을 단계별로 살펴보겠습니다.

1. 예제 테이블 생성하기

먼저 FIND_IN_SET()의 동작을 확인하기 위해 간단한 테이블을 생성해 보겠습니다. 테이블 생성 쿼리는 다음과 같습니다.

mysql> create table ProductStock
    -> (
    -> ProductId int,
    -> ProductName varchar(20),
    -> ProductQuantity int,
    -> ProductPrice float
    -> );
Query OK, 0 rows affected (0.79 sec)

2. 샘플 데이터 삽입하기

이제 INSERT 명령어를 사용해 테이블에 몇 개의 레코드를 추가합니다.

mysql> insert into ProductStock values(1,'Product-101',10,500.56);
Query OK, 1 row affected (0.20 sec)
mysql> insert into ProductStock values(25,'Product-111',5,150.00);
Query OK, 1 row affected (0.21 sec)
mysql> insert into ProductStock values(67,'Product-311',7,1000.50);
Query OK, 1 row affected (0.60 sec)
mysql> insert into ProductStock values(55,'Product-561',8,900.00);
Query OK, 1 row affected (0.24 sec)
mysql> insert into ProductStock values(75,'Product-221',15,670.56);
Query OK, 1 row affected (0.14 sec)

3. 전체 레코드 조회하기

SELECT 문을 사용해 테이블의 모든 레코드를 확인해 보겠습니다.

mysql> select *from ProductStock;

출력 결과

+-----------+-------------+-----------------+--------------+
| ProductId | ProductName | ProductQuantity | ProductPrice |
+-----------+-------------+-----------------+--------------+
|         1 | Product-101 |              10 |       500.56 |
|        25 | Product-111 |               5 |          150 |
|        67 | Product-311 |               7 |       1000.5 |
|        55 | Product-561 |               8 |          900 |
|        75 | Product-221 |              15 |       670.56 |
+-----------+-------------+-----------------+--------------+
5 rows in set (0.00 sec)

4. FIND_IN_SET()으로 원하는 순서대로 정렬하기

아래는 IN() 조건과 함께 FIND_IN_SET()을 사용해, 나열한 순서(25 → 55 → 67 → 75 → 1) 그대로 결과를 조회하는 쿼리입니다.

mysql> select *from ProductStock
    -> where ProductId IN(25,55,67,75,1)
    -> order by find_in_set(ProductId,'25,55,67,75,1');

출력 결과

+-----------+-------------+-----------------+--------------+
| ProductId | ProductName | ProductQuantity | ProductPrice |
+-----------+-------------+-----------------+--------------+
|        25 | Product-111 |               5 |          150 |
|        55 | Product-561 |               8 |          900 |
|        67 | Product-311 |               7 |       1000.5 |
|        75 | Product-221 |              15 |       670.56 |
|         1 | Product-101 |              10 |       500.56 |
+-----------+-------------+-----------------+--------------+
5 rows in set (0.31 sec)

정리

FIND_IN_SET(ProductId, '25,55,67,75,1')은 두 번째 인자로 전달된 문자열 목록에서 해당 값이 몇 번째 위치에 있는지를 반환합니다. 이 값을 ORDER BY의 정렬 기준으로 사용하면, IN() 목록에 작성한 순서 그대로 결과를 얻을 수 있습니다. 이 방식은 우선순위가 정해진 항목들을 특정 순서로 조회해야 할 때 매우 유용하게 활용됩니다.