LEFT JOIN으로 두 테이블 값 빼기
MySQL에서 두 테이블에 저장된 값을 서로 빼야 할 때 LEFT JOIN을 활용하면 간단하게 해결할 수 있습니다. 이 글에서는 실제 예제를 통해 두 테이블의 값을 뺀 차이를 구하는 방법을 단계별로 살펴보겠습니다.
예제 테이블 준비
먼저 상품의 현재 가격과 이전 가격을 각각 저장한 두 개의 테이블을 준비합니다.
mysql> Select * from value_curdate; +----+----------+-------+ | Id | Product | Price | +----+----------+-------+ | 1 | Notebook | 100 | | 2 | Pen | 40 | | 3 | Pencil | 65 | +----+----------+-------+ 3 rows in set (0.00 sec) mysql> Select * from value_prevdate; +----+-----------+-------+ | Id | Product | Price | +----+-----------+-------+ | 1 | Notebook | 85 | | 2 | Pen | 34 | | 3 | Pencil | 56 | | 4 | Colors | 65 | | 5 | Fevistick | 25 | +----+-----------+-------+ 5 rows in set (0.00 sec)
위의 두 테이블은 각각 상품의 현재 가격(value_curdate)과 이전 가격(value_prevdate)을 담고 있습니다.
LEFT JOIN 쿼리로 가격 차이 계산하기
이제 LEFT JOIN을 사용하여 두 테이블에 공통으로 존재하는 같은 상품의 가격 차이를 계산하는 쿼리를 작성합니다.
mysql> Select value_curdate.id, value_curdate.product,
value_curdate.price as Curprice,
value_prevdate.price as 'prevprice',
value_curdate.price - value_prevdate.price as 'Difference'
from value_curdate
LEFT JOIN value_prevdate ON value_curdate.id = value_prevdate.id;
+----+----------+----------+-----------+------------+
| id | product | Curprice | prevprice | Difference |
+----+----------+----------+-----------+------------+
| 1 | Notebook | 100 | 85 | 15 |
| 2 | Pen | 40 | 34 | 6 |
| 3 | Pencil | 65 | 56 | 9 |
+----+----------+----------+-----------+------------+
3 rows in set (0.00 sec)결과 해석
쿼리 결과를 보면 다음과 같은 차이를 확인할 수 있습니다.
- Notebook: 100 − 85 = 15
- Pen: 40 − 34 = 6
- Pencil: 65 − 56 = 9
SELECT 절에서 별칭(alias)을 사용해 현재 가격은 Curprice, 이전 가격은 prevprice, 그리고 두 값의 뺄셈 결과는 Difference라는 이름으로 출력했습니다. 이렇게 하면 결과를 한눈에 파악하기 쉽습니다.
LEFT JOIN 사용 시 주의할 점
LEFT JOIN은 왼쪽 테이블(value_curdate)의 모든 행을 기준으로 결과를 반환합니다. 만약 오른쪽 테이블(value_prevdate)에 일치하는 행이 없다면 해당 열은 NULL로 표시되며, NULL과의 뺄셈 결과 역시 NULL이 됩니다. 따라서 이런 경우를 대비하려면 IFNULL() 함수를 함께 사용하는 것이 좋습니다.
Select value_curdate.id, value_curdate.product,
value_curdate.price - IFNULL(value_prevdate.price, 0) as 'Difference'
from value_curdate
LEFT JOIN value_prevdate ON value_curdate.id = value_prevdate.id;이처럼 LEFT JOIN과 산술 연산을 조합하면 두 테이블 간의 값 차이를 손쉽게 계산할 수 있으며, 가격 변동 분석이나 재고 비교 등 다양한 실무 상황에서 유용하게 활용됩니다.