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

MySQL에서 특정 열이 여러 값을 모두 만족하는 행을 선택하는 방법

MySQL에서 하나의 열이 여러 값을 동시에 만족하는 행을 선택하려면 GROUP BY 절과 HAVING 절을 IN() 연산자와 함께 사용하면 됩니다. 이 글에서는 실제 예제를 통해 그 방법을 단계별로 살펴보겠습니다.

1. 테이블 생성하기

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

mysql> create table DemoTable1885
    (
    FirstName varchar(20),
    Subject varchar(50)
    );
Query OK, 0 rows affected (0.00 sec)

2. 데이터 삽입하기

INSERT 명령어를 사용하여 테이블에 레코드를 추가합니다.

mysql> insert into DemoTable1885 values('John','MySQL');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1885 values('John','MongoDB');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1885 values('Carol','MySQL');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1885 values('David','Java');
Query OK, 1 row affected (0.00 sec)

3. 테이블 데이터 확인하기

SELECT 문으로 저장된 데이터를 조회해 보겠습니다.

mysql> select * from DemoTable1885;

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

+-----------+---------+
| FirstName | Subject |
+-----------+---------+
| John      |    MySQL|
| John      |  MongoDB|
| Carol     |    MySQL|
| David     |    Java |
+-----------+---------+
4 rows in set (0.00 sec)

4. 여러 값을 모두 만족하는 행 선택하기

핵심 쿼리는 다음과 같습니다. 'MySQL'과 'MongoDB' 두 값을 모두 가진 사람(FirstName)을 찾는 쿼리입니다.

mysql> select FirstName from DemoTable1885
    where Subject IN('MySQL','MongoDB')
    group by FirstName
    having count(*)=2;

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

+-----------+
| FirstName |
+-----------+
| John      |
+-----------+
1 row in set (0.00 sec)

쿼리 동작 원리

이 쿼리가 어떻게 작동하는지 단계별로 살펴보겠습니다.

  • WHERE Subject IN('MySQL','MongoDB'): 먼저 Subject 열의 값이 'MySQL' 또는 'MongoDB'인 행만 필터링합니다. 따라서 'Java'를 가진 David는 이 단계에서 제외됩니다.
  • GROUP BY FirstName: 필터링된 행을 이름(FirstName) 기준으로 그룹화합니다.
  • HAVING count(*) = 2: 각 그룹 내에서 조건에 해당하는 행이 정확히 2개, 즉 두 값을 모두 만족하는 그룹만 최종 결과로 남깁니다.

결과적으로 John은 'MySQL'과 'MongoDB' 두 값을 모두 가지고 있어 결과에 포함되지만, Carol은 'MySQL' 하나만 가지고 있어 제외됩니다. 이처럼 IN()으로 후보 값을 좁힌 뒤 GROUP BY와 HAVING count(*)로 값의 개수를 검증하면, 하나의 열이 여러 값을 모두 충족하는 행을 손쉽게 찾을 수 있습니다.