Search
🔺

7. JOIN 심화

JOIN

두 개 이상의 테이블들은 연결 또는 결합하여 데이터를 출력하는 것
연산자에 따라 JOIN 방식 분류 시
EQUI JOIN
non EQUI JOIN

EQUI JOIN(등가 교집합)

두 개의 테이블 간에 서로 정확하게 일치하는 경우를 활용하는 조인
→ 등가 연산자를 사용한 조인을 의미 ' = '
대부분 기본키-외래키 관계를 기반으로 발생하나, 모든 조인이 그런 것은 아님
→ 꼭 그런것은 아니지만 그게 일반적이다

Non EQUI JOIN(비등가 교집합)

두 개의 테이블 간에 서로 정확하게 일치하지 않은 경우를 활용하는 조인
→ 등가 연산자 이외의 연산자들을 사용한 조인을 의미
'>' '≥' '≤' '<' 'BETWEEN'

FROM 절 JOIN 형태

Inner join

내부 Join이라고 하며 Join 조건에서 동일한 값이 있는 행만 반환
Join의 기본 값으로 'Inner' 생략 가능

Using 조건절

같은 이름을 가진 칼럼들 중 원하는 칼럼에 대해서만 선택적으로 등가 조인 가능
SQL Server 에서는 지원 X
→ 굳이 테이블 1의 컬럼명, 테이블2의 컬럼명을 적어줄 필요 없음

Natural join

두 테이블 간의 동일한 이름을 갖는 모든 칼럼들에 대해 등가 조인을 수행
→ Natural Join 자체가 동일한 이름을 갖는 모든 칼럼에 자동으로 등가 조인 수행

Cross join

join 조건이 없는 경우 생길 수 있는 모든 데이터의 조합을 조회
→ 모든 데이터의 경우의 수를 조합하여 조회
Cross join도 'cross'를 생략할 수 있음. inner join도 생략 가능한데 이너조인은 'on'조건절나 using을 필수적으로 사용해야하는데, 그 두개가 없으면 자동적으로 'cross join'으로 인식

Outer join (left, right, full)

두 개의 테이블 간에 교집합을 조회하고 한쪽 테이블에만 있는 데이터도 포함시켜서 조회
빈 곳은 NULL 값으로 출력
where 조건절에서 한쪽에만 있는 데이터를 포함시킬 테이블 쪽으로(+)를 위치
표준 outer join(left join)
표준 outer join(right join)
표준 outer join(full outer join)

표준 Outer join(full outer join) in MySQL

union은 중복된건 지워주기 때문에, outer join이 지원되지 않는 maria DB에서는 union을 사용하면 full outer join의 결과를 낼 수 있음

Inner vs Outer vs Cross join 비교

inner join → 2개 행
cross join → 12개 행
left outer join → 4개 행
right outer join → 3개 행
full outer join → 5개 행

FROM 절 JOIN 형태 + Where

join을 활용한 쿼리에서도 where문을 이용하여 조건을 걸 수 있음

셀프 조인

동일 테이블 사이의 조인 →
이를 수행하면 테이블과 칼럼 이름이 모두 동일하기 때문에 식별을 위해 별칭 필수
자기 자신을 조인하는거기 때문에 각각에 대한 별칭 필수

셀프 조인 예시

기존에는 테이블 1,2에대한 join을 했었는데 이제는 테이블 1이 자기 자신을 조인 함

셀프조인 예시 - 계층형 질의