INNER JOIN
정의
- 조인조건에서 양쪽 테이블 모두 일치하는 행만 반환
- 교집합 역할
문법
SELECT *
FROM A
INNER JOIN B ON A.id = B.id;
예시
- member, order 테이블에서 id가 일치하는 데이터만 조회
- 회원정보에 있으나 주문정보에는 없는 회원을 제외
SELECT m.name, o.product
FROM member m
INNER JOIN orders o ON m.id = o.member_id;
OUTER JOIN
정의
- 조인조건에서 불일치하는 행도 포함시켜 결과를 반환
- 누락된 쪽에는 NULL처리하여 리턴값으로 반환한다.
다양한 옵션
- LEFT OUTER JOIN
- sql에서 왼쪽 테이블기준으로
- 왼쪽은 모두 포함, 오른쪽은 없으면 NULL처리한다.
- RIGHT OUTER JOIN
- 오른쪽 테이블을 기준으로
- 오른쪽은 모두 포함하며, 왼쪽은 없으면 NULL처리한다.
- FULL OUTER JOIN
- 일치하는 값과 일치하지 않는 값 모든 행을 포함한다.
- MySQL은 지원하지 않는 기능, Oracle은 지원
SQL예시
SELECT m.name, o.product
FROM member m
LEFT OUTER JOIN orders o ON m.id = o.member_id;
- LEFT OUTER JOIN
- 모든 회원출력된다.
- 주문없는 회원은 product컬럼이 NULL로 되어 리턴된다.
SELECT m.name, o.product
FROM member m
RIGHT OUTER JOIN orders o ON m.id = o.member_id;
- RIGHT OUTER JOIN
- 모든 주문이 출력
- 주문자 정보없는 회원이름은 NULL
SELECT m.name, o.product
FROM member m
FULL OUTER JOIN orders o ON m.id = o.member_id;
- FULL OUTER JOIN
- member나 orders에 하나라도 존재하면 리턴
INNER JOIN vs OUTER JOIN
- 반환행
- inner : 조건이 양쪽에 다 만족하는 행만
- outer : 조건에 맞지않아도 한쪽또는 모두 포함
- NULL 포함여부
- inner : x
- outer : 조건 미충족시 NULL값을 넣음
- inner : 데이터정확성 체크, 교집합 추출
- outer : 누락된 데이터 확인용으로 사용가능
활용방법
- LEFT OUTER JOIN은 누락된 데이터 확인용, 기준테이블을 기준으로 보고 싶을떄 사용한다.
- 조인을 많이 하는 테이블은 조인 조건에서 인덱스가 없을 경우 성능저하가능
- WHERE 절 조건 순서가 OUTER JOIN 결과에 영향
예상질문과 답변
Q. INNER JOIN과 LEFT OUTER JOIN의 차이
- inner join은 두 테이블에 모두 존재하는 행만 반환
- outer는 왼쪽테이블 기준으로하며, 왼쪽은 모든 행, 오른쪽은 매칭값없으면 null로
Q. 어떤 상황에서 OUTER JOIN을 사용?
- 예를 들면, 모든회원을 조뢰할때 주문내역이 없더라도 회원을 출력되게 해야할때
- 즉, 기준테이블은 항상나와야 하고 연관된 데이터가 없더라도 보여주어야 할떄 사용한다.