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

MySQL에서 IN 절에 지정된 값만 원하는 순서대로 표시하는 방법

MySQL IN 절과 ORDER BY FIELD()를 활용한 순서 지정 조회

IN 절에 지정한 값들만 조회하고, 그 값을 원하는 순서대로 정렬하고 싶다면 IN() 조건과 ORDER BY 절의 FIELD() 함수를 함께 사용하면 됩니다. 먼저 예제 테이블을 생성해 보겠습니다.

mysql> create table DemoTable1986
    (
    Number int
    );
Query OK, 0 rows affected (0.00 sec)

insert 명령을 사용하여 테이블에 레코드를 삽입합니다.

mysql> insert into DemoTable1986 values(50);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1986 values(60);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1986 values(100);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1986 values(200);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1986 values(350);
Query OK, 1 row affected (0.00 sec)

select 문으로 테이블의 전체 레코드를 확인합니다.

mysql> select * from DemoTable1986;

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

+--------+
| Number |
+--------+
|     50 |
|     60 |
|    100 |
|    200 |
|    350 |
+--------+
5 rows in set (0.00 sec)

FIELD() 함수로 정렬 순서 지정하기

다음은 IN 절에 지정된 값(50, 100, 350)만 조회하면서, FIELD() 함수를 사용해 350 → 100 → 50 순서로 정렬하는 쿼리입니다.

mysql> select * from DemoTable1986 where Number IN(50,100,350) order by field(Number,350,100,50);

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

+--------+
| Number |
+--------+
|    350 |
|    100 |
|     50 |
+--------+
3 rows in set (0.00 sec)

동작 원리: FIELD() 함수는 첫 번째 인자로 받은 값이 이후 나열된 값들 중 몇 번째 위치에 해당하는지를 반환합니다. 즉, Number가 350이면 1, 100이면 2, 50이면 3을 반환하므로, ORDER BY 절에서 이 결과값을 기준으로 정렬하면 IN 절에 나열한 순서 그대로 데이터가 출력됩니다. 일반적인 ASC/DESC 정렬과 달리 개발자가 직접 지정한 임의의 순서로 결과를 제어할 수 있다는 점이 큰 장점입니다.