SQL의 LEFT JOIN(왼쪽 조인)은 SQL 조인(join)의 한 종류로, 지정된 '왼쪽(left)' 테이블의 모든 행과 함께 특정 조건에 일치하는 '오른쪽(right)' 테이블의 행들을 반환합니다.
조인(Join)이란 무엇인가?
SQL로 쿼리를 작성할 때는 하나의 테이블만 다루는 경우가 많지만, 두 개 이상의 테이블을 동시에 조회해야 하는 상황도 자주 발생합니다. 이럴 때는 여러 테이블의 정보를 하나의 결과로 결합해야 하는데, SQL에서는 이를 조인(join)이라고 부릅니다.
조인을 사용하면 여러 테이블에서 데이터를 가져와 하나의 결과 테이블로 합칠 수 있습니다. 예를 들어 직원(employees) 테이블과 부서(departments) 테이블을 조인하면, 각 직원이 소속된 부서 이름을 한 번에 확인할 수 있습니다.
이 글에서는 SQL의 다양한 조인 중 LEFT JOIN을 집중적으로 살펴봅니다. LEFT JOIN이 유용하게 활용되는 상황과 실제 쿼리 작성 방법까지 함께 알아보겠습니다.
SQL LEFT JOIN의 기본 개념
LEFT JOIN은 쿼리에서 지정한 '왼쪽' 테이블의 모든 레코드를 반환합니다. 그리고 주어진 조건을 기준으로 오른쪽 테이블의 값과 매칭하여, 조건이 일치하는 행들을 추가로 반환합니다. LEFT JOIN은 SQL 외부 조인(outer join)의 한 종류입니다.
예를 들어 LEFT JOIN을 사용하면 각 직원의 소속 부서 이름 목록을 조회할 수 있으며, 부서가 아직 배정되지 않은 직원도 결과에서 누락되지 않습니다.
LEFT JOIN 기본 문법
SELECT Table1.Column1, Table2.Column1
FROM Table1
LEFT JOIN Table2
ON Table1.Column2 = Table2.Column2;
쿼리는 SELECT문으로 시작합니다. FROM 절에 명시된 테이블이 '왼쪽' 테이블이며, 그다음 LEFT JOIN 키워드로 '오른쪽' 테이블을 지정합니다. ON 절에는 두 테이블을 연결할 조건을 작성합니다.
LEFT JOIN은 외부 조인이기 때문에 '왼쪽 외부 조인(left outer join)'이라는 용어로 불리기도 합니다. 참고로 왼쪽 테이블의 행이 오른쪽 테이블과 매칭되지 않으면, 오른쪽 테이블 컬럼의 값은 NULL로 채워집니다.
LEFT JOIN 실전 예제
각 직원이 근무하는 부서 이름을 한 번의 쿼리로 조회하고 싶다고 가정해 보겠습니다. 다음 쿼리를 사용하면 원하는 데이터를 얻을 수 있습니다.
SELECT employees.name, employees.title, company_departments.name AS DeptName
FROM employees
LEFT JOIN company_departments
ON employees.department_id = company_departments.department_id;
이 쿼리는 다음과 같이 7개의 레코드를 반환합니다.
| name | title | deptname |
|---|---|---|
| Luke | Sales Associate | Sales |
| Mike | Sales Associate | Sales |
| Hannah | Sales Associate | Sales |
| Geoff | Senior Sales Associate | Sales |
| Alexis | Sales Associate | Sales |
| Emma | Marketing Director | Marketing |
| Jonah | Vice President of Sales | Executive |
(7 rows)
쿼리의 첫 번째 줄에서는 세 개의 컬럼을 지정했습니다. 직원 이름(name), 직급(title), 그리고 소속 부서 이름입니다. AS DeptName은 부서 이름 컬럼에 'DeptName'이라는 별칭을 붙여 출력하겠다는 의미입니다.
FROM 절에서는 employees 테이블에서 데이터를 가져오도록 지정하고, 이어서 company_departments 테이블과의 LEFT JOIN을 생성합니다. 마지막 ON 절에서는 두 테이블의 공통 값인 department_id를 기준으로 테이블을 연결합니다.
매칭되지 않는 데이터 처리하기
LEFT JOIN은 왼쪽 테이블의 모든 행을 반환하며, 오른쪽 테이블에서는 조인 조건을 충족하는 행만 반환합니다.
예를 들어 어떤 직원의 부서 ID가 9인데 해당 부서가 company_departments 테이블에 존재하지 않더라도, 이 직원은 쿼리 결과에 그대로 나타납니다. 반대로 소속 직원이 한 명도 없는 부서는 조인 결과에 포함되지 않습니다.
실제로 확인해 보겠습니다. 데이터베이스에 다음과 같은 신규 직원을 추가했다고 가정합니다.
| name | title | department_id |
|---|---|---|
| Adam | Senior Sales Associate | 9 |
(1 row)
부서 ID 9는 company_departments 테이블에 존재하지 않습니다. 하지만 앞서 실행한 것과 동일한 LEFT JOIN 쿼리를 다시 수행하면, Adam의 레코드도 부서 이름 없이(NULL) 결과에 포함됩니다.
| name | title | deptname |
|---|---|---|
| Luke | Sales Associate | Sales |
| Mike | Sales Associate | Sales |
| Hannah | Sales Associate | Sales |
| Geoff | Senior Sales Associate | Sales |
| Alexis | Sales Associate | Sales |
| Emma | Marketing Director | Marketing |
| Jonah | Vice President of Sales | Executive |
| Adam | Senior Sales Associate |
만약 이 쿼리가 INNER JOIN이었다면 부서 정보가 없는 Adam의 레코드는 결과에서 제외되었을 것입니다. 조건에 맞지 않는 왼쪽 테이블의 데이터까지 모두 유지할 수 있다는 점이 LEFT JOIN과 INNER JOIN의 핵심적인 차이입니다.
마치며
SQL의 LEFT JOIN은 두 개 이상의 테이블을 조회하면서 지정된 '왼쪽' 테이블의 모든 행을 반환하고, 오른쪽 테이블에서는 조인 조건을 충족하는 행만 추가로 반환합니다.
예를 들어 고객 목록과 함께 각 고객이 가입한 멤버십 플랜의 이름을 조회하고 싶다면, 플랜 정보가 별도의 테이블에 저장되어 있어도 LEFT JOIN 하나로 손쉽게 데이터를 결합할 수 있습니다. 데이터가 누락되면 안 되는 보고서 작성이나 데이터 분석 업무에서 LEFT JOIN은 특히 유용하게 활용됩니다.