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

MySQL 쿼리에서 배열 요소 일치시키는 방법

MySQL에서 배열 요소와 일치하는 값 조회하기

MySQL에서 특정 값들의 집합(배열)과 모두 일치하는 레코드를 찾으려면 IN 절GROUP BY, HAVING COUNT(*)를 함께 활용하면 됩니다. 이번 글에서는 예제 테이블을 만들고, 지정한 값들이 모두 포함된 Id를 조회하는 방법을 단계별로 살펴보겠습니다.

1. 테이블 생성하기

먼저 예제에 사용할 테이블을 생성합니다.

mysql> create table DemoTable1523
    -> (
    -> Id int,
    -> Value int
    -> );
Query OK, 0 rows affected (0.76 sec)

2. 샘플 데이터 삽입하기

INSERT 문을 사용하여 테이블에 레코드를 추가합니다.

mysql> insert into DemoTable1523 values(1,56);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable1523 values(2,78);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable1523 values(1,34);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable1523 values(2,45);
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable1523 values(1,99);
Query OK, 1 row affected (0.10 sec)

3. 전체 데이터 확인하기

SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.

mysql> select * from DemoTable1523;

실행하면 다음과 같은 결과가 출력됩니다.

+------+-------+
| Id   | Value |
+------+-------+
|    1 |   56 |
|    2 |   78 |
|    1 |   34 |
|    2 |   45 |
|    1 |   99 |
+------+-------+
5 rows in set (0.00 sec)

4. 배열 요소와 일치하는 Id 조회하기

다음은 배열 요소를 일치시키는 핵심 쿼리입니다. 여기서는 값 34, 99, 56 세 가지가 모두 존재하는 Id를 선택합니다.

mysql> select Id from DemoTable1523
    -> where Value IN ('34','99','56')
    -> group by Id
    -> having count(*)=3;

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

+------+
| Id   |
+------+
|    1 |
+------+
1 row in set (0.00 sec)

쿼리 동작 원리

이 쿼리가 작동하는 원리를 간단히 정리하면 다음과 같습니다.

WHERE Value IN ('34','99','56') : Value 컬럼이 목록에 있는 값 중 하나라도 일치하는 행만 필터링합니다.

GROUP BY Id : 일치하는 행들을 Id 기준으로 그룹화합니다.

HAVING COUNT(*) = 3 : 각 그룹에서 일치한 행의 개수가 정확히 3개(즉, 세 값이 모두 존재)인 경우만 최종 결과로 남깁니다.

위 예제에서 Id 1은 56, 34, 99 세 값을 모두 가지고 있어 결과에 포함되었지만, Id 2는 해당 값들과 일치하는 데이터가 없으므로 제외된 것입니다. 만약 일치해야 하는 값의 개수가 달라진다면 HAVING 절의 숫자만 그에 맞게 조정하면 됩니다.