겹치지 않는 행이 존재할 경우, 그 행은 결과에서 제외.
성능 차이
두 테이블에서 JOIN
을 위한 기준 열이 서로 값을 가지고 있는 경우 조회에서 누락되는 행은 존재하지 않음. 그렇다면 LEFT JOIN
과 INNER JOIN
은 같은 조회 결과를 보임. 이때, INNER JOIN
이 상대적으로 성능이 좋음.
JOIN 조건에서 동일한 값이 없는 행도 반환할 때 사용하는 구문.
즉, A, B 테이블을 JOIN할 경우, 조건에 맞지 않는 데이터도 표시하고 싶을 때 OUTER JOIN 사용.
LEFT JOIN
왼쪽의 모든 행을 조회.
RIGHT JOIN
오른쪽의 모든 행을 조회.
FULL JOIN
양쪽의 모든 행을 조회.
SELECT * // 조회할 컬럼을 선택한다 (모든 컬럼 조회)
FROM TABLE1 T1 LEFT/RIGHT/FULL OUTER JOIN TABLE2 T2
ON (T1.KEY = T2.KEY) // 두 테이블을 연결할 조건을 명시한다
USING 조건절을 사용하는 경우는 JOIN하는 테이블 내에 있는 컬럼들이 동일한 이름을 가지고 있을 때 사용 가능.
SELECT * 조회할 컬럼을 선택한다 (모든 컬럼 조회)
FROM TABLE1 T1 LEFT/RIGHT/FULL OUTER JOIN TABLE2 T2
USING (KEY) 두 테이블이 동일하게 갖고 있는 컬럼명으로 조건을 명시한다
LEFT JOIN (LEFT OUTER JOIN)
아래와 같이 KEY 컬럼이 TIMESTAMP와 NUM인 같은 구조의 테이블 A와 B가 있음.
A 테이블에 LEFT OUTER JOIN B를 하는 경우
A,B 테이블의 조인 조건이 맞는 경우 B 테이블의 컬럼에서 해당 데이터를 가져오고, 조인 조건이 맞지 않는 경우 각 테이블의 레코드 중 A 테이블의 레코드는 무조건 결과값에 포함되어 나오고 B테이블에서 가져온 컬럼들은 NULL로 채움.
키 값인 TIMESTAMP와 VIN이 매칭되는 데이터를 함께 보여주고 있지만, 왼쪽 테이블(A)를 기준으로 매칭되지 않는 데이터까지 보여주고 있음.
RIGHT JOIN (RIGHT OUTER JOIN)
키 값인 TIMESTAMP와 VIN이 매칭되는 데이터를 함께 보여주고 있지만, 오른쪽 테이블(B)를 기준으로 매칭되지 않는 데이터까지 보여주고 있음.
FULL JOIN (FULL OUTER JOIN)
키 값인 TIMESTAMP와 VIN이 매칭되는 데이터를 함께 보여주고 있고, 두 테이블 A와 B에서 매칭되지 않는 데이터도 함께 보여주고 있음.
**FULL OUTER JOIN 의 같은 예제로 USING 사용 예시
USING구문은 MS SQL Server, Sybase에서는 지원하지 않음.
참고
https://velog.io/@profile_exe/SQL-LEFT-JOIN-INNER-JOIN-%EC%B0%A8%EC%9D%B4
https://haenny.tistory.com/34