두 컬럼 값의 차이에 대한 절댓값이 특정 숫자보다 큰 레코드만 조회하고 싶다면, MySQL의 ABS() 함수와 WHERE 절을 함께 사용하면 됩니다. ABS() 함수는 숫자의 절댓값을 반환하므로, 두 값 중 어느 쪽이 큰지와 관계없이 차이의 크기만으로 조건을 걸 수 있습니다.
기본 문법
SELECT * FROM yourTableName WHERE ABS(yourColumnName1 - yourColumnName2) >= yourCertainNumber;
예제 테이블 생성
먼저 실습용 테이블을 생성해 보겠습니다.
mysql> create table DemoTable
(
Number1 int,
Number2 int
);
Query OK, 0 rows affected (0.59 sec)다음은 INSERT 명령을 사용하여 테이블에 샘플 데이터를 삽입하는 쿼리입니다.
mysql> insert into DemoTable values(10,20); Query OK, 1 row affected (0.18 sec) mysql> insert into DemoTable values(100,200); Query OK, 1 row affected (0.13 sec) mysql> insert into DemoTable values(400,300); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable values(1000,500); Query OK, 1 row affected (0.15 sec)
저장된 데이터 확인
SELECT 명령으로 테이블에 저장된 전체 레코드를 확인합니다.
mysql> select *from DemoTable;
위 쿼리는 다음과 같은 결과를 출력합니다.
+---------+---------+ | Number1 | Number2 | +---------+---------+ | 10 | 20 | | 100 | 200 | | 400 | 300 | | 1000 | 500 | +---------+---------+ 4 rows in set (0.00 sec)
절댓값 조건으로 레코드 조회하기
이제 두 값의 차이에 대한 절댓값이 특정 숫자보다 큰 레코드를 조회하는 쿼리를 작성해 보겠습니다. 여기서는 기준값으로 100을 사용하여 절댓값을 비교합니다.
mysql> select *from DemoTable where abs(Number1-Number2) > 100;
실행 결과는 다음과 같습니다.
+---------+---------+ | Number1 | Number2 | +---------+---------+ | 1000 | 500 | +---------+---------+ 1 row in set (0.02 sec)
결과 분석
각 행의 차이를 계산해 보면 다음과 같습니다.
- 10과 20의 차이: 절댓값 10 → 조건 불충족
- 100과 200의 차이: 절댓값 100 → 100보다 크지 않으므로 제외
- 400과 300의 차이: 절댓값 100 → 100보다 크지 않으므로 제외
- 1000과 500의 차이: 절댓값 500 → 조건 충족
따라서 두 값의 차이가 100보다 큰 (1000, 500) 레코드 하나만 결과로 반환됩니다.
참고 사항
조건 연산자는 목적에 따라 조정할 수 있습니다. 예를 들어 >=를 사용하면 차이가 정확히 100인 경우도 포함되며, <나 BETWEEN을 활용하면 반대로 차이가 작은 레코드나 특정 범위 내의 레코드도 손쉽게 조회할 수 있습니다.