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

MySQL 범위 조회 방법: IN과 BETWEEN의 차이 완벽 정리

MySQL에서 범위 조회는 어떻게 할까?

MySQL에서 IN 연산자로는 범위(range) 조회가 불가능합니다. 동일한 결과를 얻고 싶다면 BETWEEN 절을 사용해야 합니다. 예제를 통해 자세히 살펴보겠습니다.

IN(start, end)과 BETWEEN의 차이점

IN(시작값, 끝값)은 시작값과 끝값 두 개만 비교 대상으로 삼기 때문에, 그 사이에 있는 중간 값들은 조회되지 않습니다. 반면 BETWEEN 절을 사용하면 시작값과 끝값 사이의 모든 값을 조회할 수 있습니다.

BETWEEN은 양 끝 값을 포함(inclusive)하는 연산자입니다. 예를 들어 1~15까지의 숫자가 있을 때 4부터 10까지를 조회하면, 경계 값인 4와 10도 결과에 함께 포함됩니다.

예제 테이블 생성하기

먼저 테스트용 테이블을 생성하겠습니다.

mysql> create table SelectInWithBetweenDemo
-> (
-> PortalId int
-> );
Query OK, 0 rows affected (0.77 sec)

배치(batch) 삽입 방식으로 여러 레코드를 한 번에 입력합니다.

mysql> insert into SelectInWithBetweenDemo values(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12),(13),(14),(15);
Query OK, 15 rows affected (0.19 sec)
Records: 15 Duplicates: 0 Warnings: 0

SELECT 문으로 저장된 전체 레코드를 확인합니다.

mysql> select *from SelectInWithBetweenDemo;

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

+----------+
| PortalId |
+----------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
| 11 |
| 12 |
| 13 |
| 14 |
| 15 |
+----------+
15 rows in set (0.00 sec)

IN으로 범위 조회 시 발생하는 문제

이제 IN 절에 범위처럼 값을 지정해 보겠습니다.

mysql> select PortalId from SelectInWithBetweenDemo where PortalId IN(4,10);

결과는 다음과 같습니다.

+----------+
| PortalId |
+----------+
| 4 |
| 10 |
+----------+
2 rows in set (0.00 sec)

출력 결과를 보면 4와 10 두 개의 값만 반환됩니다. 우리가 원했던 것은 4, 5, 6, 7, 8, 9, 10처럼 범위 내의 모든 값인데 말이죠. 이것이 바로 IN이 범위 조회에 적합하지 않은 이유입니다.

BETWEEN으로 범위 조회하기

이번에는 BETWEEN 절을 사용해 보겠습니다. 양 끝 값을 포함하여 원하는 범위의 결과를 정확히 얻을 수 있습니다.

mysql> select PortalId from SelectInWithBetweenDemo where PortalId Between 4 and 10;

실행 결과입니다.

+----------+
| PortalId |
+----------+
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
+----------+
7 rows in set (0.09 sec)

4부터 10까지 총 7개의 행이 조회되었습니다. BETWEEN은 시작값과 끝값을 모두 포함한다는 점을 기억하세요.

양 끝 값을 제외하고 싶다면? >와 < 활용

만약 경계 값을 제외한 배타적(exclusive) 범위 조회가 필요하다면, BETWEEN 대신 비교 연산자 >(크다)와 <(작다)를 사용하면 됩니다.

mysql> select PortalId from SelectInWithBetweenDemo where PortalId > 4 and PortalId < 10;

실행 결과입니다.

+----------+
| PortalId |
+----------+
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
+----------+
5 rows in set (0.00 sec)

4와 10이 제외된 5부터 9까지 총 5개의 행이 조회되었습니다.

정리

  • IN(값1, 값2): 나열된 특정 값들만 조회하며, 범위 개념이 없습니다.
  • BETWEEN A AND B: A와 B를 포함한 범위 전체를 조회합니다(포함 방식).
  • > A AND < B: 경계 값을 제외한 범위를 조회합니다(배타 방식).

범위 조건 조회가 필요하다면 상황에 맞게 BETWEEN 또는 비교 연산자를 사용하는 것이 올바른 방법입니다.