오류, 기능, 문제해결(SQL)

INNER JOIN, LEFT JOIN 차이점

seungmin576 2024. 12. 4. 17:48

 

부서별 직원을 계산하는 쿼리를 쓰라.

 

내가 생각한 쿼리

SELECT
	D.NAME,
	COUNT(1) AS '부서별 직원 수'
FROM employees E INNER JOIN departmenst D ON E.DEPARTMENT_ID = D.ID
GROUP BY D.ID

이렇게 썼을 때의 문제점

INNER JOIN 했기 때문에 인원이 없는 부서는 결과에 나타나질 않음.

위 테이블엔 모두 부서 안에 인원이 있기 때문에 상관없지만 만약 없다면 달라짐.

만약 꿀잠팀 부서가 존재하고 그 부서에 인원이 없다면 결과에 부서 이름과 부서별 직원 수에 아예 나오지도 않음.

테이블에 NULL 값이 없어서 다행히 결과는 같았다. 만약 꿀잠팀이 있었더라도 결과는 위 사진처럼 나왔을 것.

 

정답 쿼리

SELECT 
	d.name, COUNT(e.id) AS employee_count 
FROM departments d LEFT JOIN employees e ON d.id = e.department_id 
GROUP BY d.id

LEFT JOIN 했기 때문에 인원이 없는 부서라도 결과에 부서 이름 : 0명 이런식으로 나오기라도 함.

만약 꿀잠팀이 존재하고 그곳에 속한 인원이 없다면

위 결과에서 인사팀부터 기술팀 인원은 그대로 나오나 꿀잠팀 0이 나왔을것.

위와 다르게 꿀잠팀도 나온다

 

INNER JOIN, LEFT JOIN 차이

  • INNER JOIN

두 테이블 간의 공통된 데이터만 반환한다.

두 테이블에서 일치하는 행만 포함되며, 일치하지 않는 행은 결과에 포함되지 않는다.

두 테이블에서 특정 조건을 만족하는 데이터만 필요할 때 사용한다.

 

  • LEFT JOIN

왼쪽 테이블의 모든 행과 일치하는 오른쪽 테이블의 데이터를 반환하며, 오른쪽 테이블에 일치하는 데이터가 없을 경우 NULL로 표시한다.

왼쪽 테이블의 모든 행이 포함되며, 오른쪽 테이블에 일치하는 행이 없으면 NULL 값 반환.

왼쪽 테이블의 모든 데이터를 보존하면서, 오른쪽 테이블의 관련 데이터를 가져오고 싶을 때 사용한다.