MySQL에서 하나의 테이블에 있는 두 열(column)의 값을 서로 비교하고, 조건을 만족하는 레코드만 조회하는 방법을 소개합니다. WHERE 절에서 열끼리 직접 비교 연산자를 사용하면 아주 간단하게 구현할 수 있습니다.
1. 샘플 테이블 생성
먼저 두 개의 정수형 열을 가진 테이블을 생성해 보겠습니다.
mysql> create table DemoTable
-> (
-> Num1 int,
-> Num2 int
-> );
Query OK, 0 rows affected (0.54 sec)
2. 데이터 삽입
INSERT 명령을 사용해 테이블에 여러 개의 레코드를 추가합니다.
mysql> insert into DemoTable values(100,200);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values(200,100);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values(300,400);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values(400,300);
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable values(500,600);
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values(600,500);
Query OK, 1 row affected (0.18 sec)
3. 전체 레코드 확인
SELECT 문으로 테이블에 저장된 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
출력 결과
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
+------+------+ | Num1 | Num2 | +------+------+ | 100 | 200 | | 200 | 100 | | 300 | 400 | | 400 | 300 | | 500 | 600 | | 600 | 500 | +------+------+ 6 rows in set (0.00 sec)
4. 두 열의 값을 비교하는 쿼리
WHERE 절에서 Num1 < Num2 조건을 지정하면, 첫 번째 열의 값이 두 번째 열보다 작은 레코드만 필터링할 수 있습니다.
mysql> select *from DemoTable where Num1 < Num2;
출력 결과
조건을 만족하는 레코드만 다음과 같이 반환됩니다.
+------+------+ | Num1 | Num2 | +------+------+ | 100 | 200 | | 300 | 400 | | 500 | 600 | +------+------+ 3 rows in set (0.00 sec)
정리
MySQL에서는 WHERE 절에 두 열 이름을 비교 연산자(<, >, = 등)로 연결하기만 하면 행 단위로 열 값을 비교할 수 있습니다. 위 예제에서는 Num1이 Num2보다 작은 3개의 레코드(100/200, 300/400, 500/600)만 반환되었습니다. 반대로 더 큰 값을 찾으려면 > 연산자를, 두 값이 같은 경우는 = 연산자를 사용하면 됩니다. 이 기법은 가격 비교, 재고 대비 주문량 확인처럼 같은 행 안의 두 컬럼 값을 비교해야 하는 다양한 상황에서 유용하게 활용할 수 있습니다.