---
# System prepended metadata

title: Join의 정의

---

## Join의 정의
두 개 이상의 테이블을 묶어 하나의 결과 집합으로 만들어내는 것

## 종류
## Inner Join
- INNER JOIN과 JOIN은 동일한 기능을 수행 (같은 것임)
- 명시적으로 INNER JOIN을 사용하는 것이 코드의 가독성을 높이고, 다른 조인 종류와 구분하기 쉽기 때문에 좋은 습관 (이라고 GPT가 주장함)
- 공통된 부분만 가져와서 하나의 테이블로 합치기
  - join을 하기 위해서는 테이블 간 공통된 컬럼이 존재해야 한다
  - 두 테이블에서 join condition을 만족하는 row/tuple 들로 결과를 만듦
      - 따라서 join condition 에서 null 값을 갖는 tuple은 결과에 포함되지 못한다 (만족하는지 안하는지 판단 자체가 안되니까)

- self inner join
    - https://kimsyoung.tistory.com/entry/SELF-JOIN-%E4%B8%8A-%EA%B0%99%EC%9D%80-%ED%85%8C%EC%9D%B4%EB%B8%94%EC%9D%84-%EC%A1%B0%EC%9D%B8%ED%95%98%EA%B8%B0

---

## LEFT/RIGHT/FULL JOIN 은 모두 [OUTER JOIN] 이다
    
- LEFT [outer] join
- RIGHT [outer] join
- FULL [outer] join

과 같이 outer 는 생략 가능하다

### Left/Right Outer Join
- outer join이란 공통된 부분만 골라 결합하는 Inner Join 과 다르게 공통되지 않은 행도 유지한다.
- 왼쪽 혹은 오른쪽(쿼리문에서 먼저 오는 쪽이 왼쪽, 뒤에 나오는 것이 오른쪽) 테이블을 기준으로
```SQL
SELECT *
FROM A AS a --// 여기가 왼쪽
(LEFT/RIGHT) OUTER JOIN B AS b --// 여기가 오른쪽
ON a.KEY = b.KEY
WHERE b.KEY IS NULL
;
```


### Full Outer Join
- 이때 두 테이블 모두의 값을 유지하면 Full Outer Join
- mysql은 지원하지 않음 -> left join과 right join을 union 해서 쓰자

### Union


### where vs on 절
- ON : JOIN 을 하기 전 필터링을 한다 (=ON 조건으로 필터링이 된 레코들간 JOIN이 이뤄진다)
- WHERE : JOIN 을 한 후 필터링을 한다 (=JOIN을 한 결과에서 WHERE 조건절로 필터링이 이뤄진다)
- 사용이 가능하지만 WHERE 절은 행들을 제한하기 위한 것이며 ON 절은 조인을 위한 것입니다. ON 절을 사용하면 더 명확하고 효율적으로 쿼리를 작성할 수 있습니다.


---
참고자료 (설명잘해주심 추천)
https://www.youtube.com/watch?v=E-khvKjjVv4