티스토리 뷰

개발용 정리

[DBMS] 데이터 join 이해하기

공부하는묵 2025. 8. 6. 14:57

join은 어떤 테이블을 기준으로 가른 테이블에 있는 행을 가져오는 연산

 

조인의 종류는 cross join, inner join, outer join이 있다. 

 

join의 종류에 따라 어떤 연산이 일어나는지 헷갈리는 경우가 많았는데

 

기본적으로는 

  1. cross join의 결과로 가능한 모든 행 포함한 테이블 생성
  2. cross join의 결과에서 on 조건에 따른 필터링 진행한 것이 inner join의 결과
  3. inner join의 결과에서 반드시 포함시킬 행을 결정해서 null로 채워놓은 것이 outer join 

 

예시 테이블을 간단하게 만들어서 이해해보자. 

 

a와 b테이블은 각각 아이디만을 속성으로 가지고 있다. 

1. Cross Join

카테시안 곱 결과를 리턴해준다. 

 

카테시안 곱은 두 테이블의 각 행에 대해서 나올 수 있는 모든 경우의 수를 포함하는 테이블이다. 

 

본 예제에서는 각 테이블의 행이 3개씩이므로, 3 * 3 = 9개의 행을 가지는 테이블이 리턴된다.

 

 2. Inner Join

Inner Join 부터는 ON 조건으로 행을 필터링한다. 

 

카테시안 곱에서 ON 조건으로 걸러진 결과가 나온다. 

 

앞의 cross join 결과에서 아이디의 값이 같은 경우만 필터링하면, id가 1인 경우와 2인 경우만 나오게 된다.

3. (Left / Right / Full) Outer Join 

Outer Join은 inner join 결과에서 결과를 가지지 않는 행까지 반드시 포함시킨다. 

 

 

앞 예시에서 inner join을 했을 때, a_id = b_id = 3인 경우가 없었기 때문에 테이블에 포함되지 않았다. 

 

하지만, outer join을 했을 때는 a_id = b _id 인 경우가 없더라도 b_id 값을 null 값으로 채운 테이블을 리턴한다. 

 

반드시 포함시킬 행의 기준은 left, right 로 결정한다. 

 

즉 left join 시에는 select 문에 들어가 있는 a 테이블의 행을 반드시 포함시킥고

 

right join 시에는 join 문에 들어가 있는 b 테이블의 행을 반드시 포함시킨다. 

 

 

 

Full join을 이용한다면, 반드시 포함시킬 행을 a 테이블, b 테이블의 합집합으로 사용할 수 있다. 

 

 

 

마지막으로, 여러 join을 나타낸 그림을 보면서 마무리

 

'개발용 정리' 카테고리의 다른 글

[Vue.js] 디렉티브(Directives)  (0) 2025.08.22
[python] decorator 정리  (3) 2025.08.13
[JavaScript] 호이스팅  (2) 2025.07.28
[JavaScript] 변수 선언 var, let, const 정리  (4) 2025.07.24
[CSS] 선택자  (0) 2025.07.23
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함