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

MySQL 하위 쿼리에서 IN() 연산자로 여러 결과 반환하는 방법

MySQL에서는 IN() 연산자를 활용하면 하위 쿼리(서브쿼리)가 반환한 여러 개의 결과값을 손쉽게 처리할 수 있습니다. IN()은 하위 쿼리가 돌려준 값 목록과 일치하는 행만 필터링해 주기 때문에, 다중 결과 비교에 매우 유용합니다.

먼저 예제에 사용할 테이블을 생성해 보겠습니다.

mysql> create table DemoTable1317
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Name varchar(20)
-> );
Query OK, 0 rows affected (0.49 sec)

샘플 데이터 삽입

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

mysql> insert into DemoTable1317(Name) values('Chris Brown');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable1317(Name) values('John Doe');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1317(Name) values('Adam Smith');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1317(Name) values('John Smith');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable1317(Name) values('David Miller');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable1317(Name) values('Carol Taylor');
Query OK, 1 row affected (0.14 sec)

전체 레코드 조회

SELECT 문을 사용하여 테이블의 모든 레코드를 확인합니다.

mysql> select *from DemoTable1317;

출력 결과

+----+--------------+
| Id | Name         |
+----+--------------+
|  1 | Chris Brown  |
|  2 | John Doe     |
|  3 | Adam Smith   |
|  4 | John Smith   |
|  5 | David Miller |
|  6 | Carol Taylor |
+----+--------------+
6 rows in set (0.00 sec)

IN()을 사용한 하위 쿼리 예제

다음은 하위 쿼리가 반환한 여러 개의 Id 값을 IN()으로 받아 해당하는 이름을 조회하는 쿼리입니다.

mysql> select Name from DemoTable1317
-> where Id IN ( select Id from DemoTable1317);

출력 결과

+--------------+
| Name         |
+--------------+
| Chris Brown  |
| John Doe     |
| Adam Smith   |
| John Smith   |
| David Miller |
| Carol Taylor |
+--------------+
6 rows in set (0.00 sec)

위 예제처럼 하위 쿼리가 여러 행을 반환하더라도 IN() 연산자를 사용하면 오류 없이 정상적으로 처리됩니다. 만약 이 자리에 =(등호)를 사용했다면 "Subquery returns more than 1 row" 오류가 발생하므로 주의해야 합니다. 즉, 하위 쿼리의 다중 결과를 비교할 때는 반드시 IN(), ANY, EXISTS 같은 다중 행 연산자를 사용하는 것이 올바른 방법입니다.