MySQL에서 특정 열의 값이 목표 값의 ±1 이내인 레코드를 조회하려면 BETWEEN -1 AND 1 조건을 활용하면 됩니다. 이 방법은 열 값에서 기준 값을 뺀 결과가 -1과 1 사이에 있는지 확인하는 방식으로 동작합니다.
예제 테이블 생성하기
먼저 예제에 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable
(
Value int
);
Query OK, 0 rows affected (0.76 sec)데이터 삽입하기
INSERT 명령을 사용해 몇 개의 레코드를 삽입합니다.
mysql> insert into DemoTable values(14); Query OK, 1 row affected (0.15 sec) mysql> insert into DemoTable values(15); Query OK, 1 row affected (0.17 sec) mysql> insert into DemoTable values(16); Query OK, 1 row affected (0.19 sec) mysql> insert into DemoTable values(17); Query OK, 1 row affected (0.09 sec) mysql> insert into DemoTable values(18); Query OK, 1 row affected (0.09 sec)
전체 데이터 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+-------+ | Value | +-------+ | 14 | | 15 | | 16 | | 17 | | 18 | +-------+ 5 rows in set (0.00 sec)
±1 이내의 정수 조회 쿼리
이제 기준 값(여기서는 17)을 기준으로 ±1 이내에 해당하는 정수를 찾는 쿼리입니다. 열 값에서 기준 값을 빼고 그 결과가 -1과 1 사이인지 BETWEEN 연산자로 판별합니다.
mysql> select *from DemoTable
where (Value-17) between -1 and 1;실행 결과는 다음과 같습니다.
+-------+ | Value | +-------+ | 16 | | 17 | | 18 | +-------+ 3 rows in set (0.03 sec)
결과를 보면 기준 값인 17을 포함하여 그보다 1 작은 16과 1 큰 18, 총 3개의 레코드가 반환된 것을 확인할 수 있습니다.
동작 원리 정리
이 쿼리의 핵심은 (Value - 17)이라는 산술 표현식입니다. 각 행마다 Value에서 17을 뺀 값이 계산되며, 그 결과가 -1(즉, Value = 16), 0(Value = 17), 1(Value = 18) 중 하나일 때만 조건을 만족하게 됩니다. 이처럼 BETWEEN 연산자와 산술 연산을 조합하면 특정 값 주변의 범위 검색을 간단하게 구현할 수 있습니다.