MySQL LEFT JOIN이란?
MySQL에서 두 개의 테이블을 LEFT JOIN으로 결합할 때는 '왼쪽 테이블(left table)'과 '오른쪽 테이블(right table)'이라는 개념이 도입되며, 조인 조건(join-predicate)도 반드시 필요합니다.
LEFT JOIN은 왼쪽 테이블의 모든 행을 결과로 반환합니다. 여기에는 조인 조건을 만족하는 행뿐만 아니라, 조건을 만족하지 못하는 행까지 모두 포함됩니다.
조건에 맞지 않는 행은 어떻게 처리될까?
왼쪽 테이블의 행 중에서 오른쪽 테이블과 매칭되지 않는 행이 있다면, 결과 집합에서 해당 행의 오른쪽 테이블 컬럼 값은 NULL로 표시됩니다. 이것이 LEFT JOIN의 핵심 특징입니다.
예제로 이해하기
개념을 쉽게 이해하기 위해 다음과 같은 데이터를 가진 두 개의 테이블 tbl_1과 tbl_2를 예로 들어보겠습니다.
mysql> Select * from tbl_1; +----+--------+ | Id | Name | +----+--------+ | 1 | Gaurav | | 2 | Rahul | | 3 | Raman | | 4 | Aarav | +----+--------+ 4 rows in set (0.00 sec) mysql> Select * from tbl_2; +----+---------+ | Id | Name | +----+---------+ | A | Aarav | | B | Mohan | | C | Jai | | D | Harshit | +----+---------+ 4 rows in set (0.00 sec)
LEFT JOIN 쿼리 작성 방법
위 두 테이블을 이름(Name) 컬럼 기준으로 LEFT JOIN하려면 다음과 같이 쿼리를 작성할 수 있습니다.
mysql> SELECT tbl_1.id, tbl_2.id FROM tbl_1 LEFT JOIN tbl_2 ON tbl_1.name = tbl_2.name; +----+------+ | id | id | +----+------+ | 1 | NULL | | 2 | NULL | | 3 | NULL | | 4 | A | +----+------+ 4 rows in set (0.02 sec)
결과 분석
결과를 살펴보면 왼쪽 테이블(tbl_1)의 네 개 행이 모두 반환된 것을 확인할 수 있습니다.
- Id 4 (Aarav): 두 테이블 모두 'Aarav'라는 이름이 존재하므로 조인 조건을 만족하여, 오른쪽 테이블의 Id 값 'A'가 함께 출력됩니다.
- Id 1, 2, 3 (Gaurav, Rahul, Raman): 오른쪽 테이블(
tbl_2)에 같은 이름이 없으므로 조인 조건을 만족하지 못하고, 대신 NULL 값이 출력됩니다.
이처럼 LEFT JOIN은 왼쪽 테이블의 데이터를 빠짐없이 유지해야 하는 경우에 매우 유용합니다. 예를 들어 전체 고객 목록을 보여주면서 주문 내역이 있는 고객만 주문 정보를 함께 표시할 때 활용할 수 있습니다.