# Join

# Join

조인은 두개의 테이블을 묶어주는 방법이다. FK를 사용하여 조인을 수행한다.
많은 데이터들을 분리하여 테이블에 넣어두기 때문에 그 데이터들을 묶어서 사용하기 위해 Join을 수행한다.

# JOIN 종류

  • INNER JOIN
  • OUTER JOIN
  • CROSS JOIN
  • SELF JOIN

# INNER JOIN

이너 조인은 테이블의 교집합으로 수행하는 조인이다.

SELECT
A.NAME, B.LOCKER_NAME
FROM MEMBER A
INNER JOIN LOCKER B ON A.LOCKER_ID = B.LOCKER_ID
1
2
3
4

MEMBER 테이블과 LOCKER 테이블을 묶어주는 JOIN이며 INNER JOIN의 특징은 교집합으로 처리한다. 즉 현재 FK가 LOCKER의 ID값인데, MEMBER에 LOCKER_ID값이 있는 값이 나오게 된다.(LOCKER_ID가 null인 MEMBER -> LOCKER이 없는 MEMBER)

# OUTER JOIN

# LEFT OUTER JOIN

조인을 해줄 때 왼쪽 기준의 테이블의 값들을 가져오는 조인이다. 조인을 할 때 왼쪽에 있는 테이블에 있는 값은 모두 가져온다.(FK가 null이어도 가져온다.)

SELECT
A.NAME, B.LOCKER_NAME
FROM MEMBER A
LEFT OUTER JOIN LOCKER B ON A.LOCKER_ID = B.LOCKER_ID
1
2
3
4

이렇게 구현될 경우 만약 MEMBER에서 LOCKER_ID값이 없더라도 데이터로 추가된다.

# RIGHT OUTER JOIN

조인을 해줄 때 오른쪽을 기준으로 테이블의 값들을 가져오는 조인이다. 왼쪽과 반대된다.

SELECT
A.NAME, B.LOCKER_NAME
FROM MEMBER A
RIGHT OUTER JOIN LOCKER B ON A.LOCKER_ID = B.LOCKER_ID
1
2
3
4

LEFT와 반대로 RIGHT인 LOCKER에 대한 정보를 포함하여 모두 가져오게 된다.

# FULL OUTER JOIN

조인을 해줄때 왼쪽과 오른쪽을 모두 가져오는 합집합의 역할을 수행하는 조인이다.

SELECT
A.NAME, B.LOCKER_NAME
FROM MEMBER A
FULL OUTER JOIN LOCKER B ON A.LOCKER_ID = B.LOCKER_ID
1
2
3
4

# CROSS JOIN

교차로 수행되는 조인이다. A테이블에 튜플이 3개, B 테이블에 튜플이 4개라면, 각각을 모두 매핑해서 JOIN해준다. 즉 12개의 튜플이 나오게 된다.

SELECT
A.NAME, B.LOCKER_NAME
FROM MEMBER A
CROSS JOIN LOCKER B
1
2
3
4

# SELF JOIN

스스로를 조인하는 것으로 하나의 테이블에서 조인을 수행한다. 이때 서로를 구분할 수 있도록 반드시 별칭을 사용해야한다.

SELECT
A.NAME, B.POSITION
FROM MEMBER A, MEMBER B
1
2
3