INNER JOIN은 지정된 조건에 따라 두 개의 조인된 테이블 모두에서 일치가 발견된 경우만 레코드를 반환합니다. OUTER JOIN(LEFT, RIGHT, FULL)을 사용할 때 결과는 다른 테이블에서 일치가 없더라도 한쪽 또는 양쪽 테이블의 모든 행을 포함합니다.
어떤 JOIN을 언제 사용해야 하는지:
예시:
-- INNER JOIN SELECT u.id, u.name, o.amount FROM users u INNER JOIN orders o ON u.id = o.user_id; -- LEFT OUTER JOIN SELECT u.id, u.name, o.amount FROM users u LEFT JOIN orders o ON u.id = o.user_id; -- FULL OUTER JOIN SELECT u.id, o.order_id FROM users u FULL OUTER JOIN orders o ON u.id = o.user_id;
오른쪽 테이블이 비어 있을 때 LEFT JOIN의 결과는 무엇인가요?
종종 "LEFT JOIN은 일치가 없으니 빈 결과를 반환합니다"라고 대답합니다. 정답: LEFT JOIN은 어쨌든 왼쪽 테이블의 모든 행을 반환하고 오른쪽 열은 NULL이 됩니다.
예시:
-- users 테이블에는 레코드가 있고, orders는 비어 있음 SELECT u.id, u.name, o.amount FROM users u LEFT JOIN orders o ON u.id=o.user_id; -- 결과: 모든 사용자, o.amount = NULL
이야기
판매 분석 프로젝트. 전체 고객 목록과 그들의 주문을 출력하기 위해 INNER JOIN을 사용했기 때문에 주문이 없는 고객이 생략되었습니다. 보고서에서 "중요한" 고객들이 오른쪽 테이블에 없어서 누락되었습니다. 해결책: LEFT JOIN을 사용합니다.
이야기
직원 및 부서 관리 플랫폼. LEFT JOIN 대신 RIGHT JOIN을 사용하여 새로운 부서를 추가할 때 혼란이 발생했고, 일부 직원들이 보고서에 포함되지 않았습니다. 이유: 조인 순서가 뒤바뀌었습니다.
이야기
데이터 스키마 마이그레이션. 변경 후 조인 중 하나가 연결 조건의 오타로 인해 CROSS JOIN으로 바뀌었습니다. 결과적으로 선택된 데이터의 양이 급격히 증가하였고 데이터가 "부풀어" 올랐습니다. 결론: 항상 JOIN 시 ON을 명시하고 JOIN 유형을 철저히 확인해야 합니다.