조인(JOIN)

문딤·2022년 9월 29일
0

조인이란?

◻ 둘 이상의 테이블을 연결해서 데이터를 검색하는 방법.
◻ 적어도 하나의 컬럼을 공유하고 있어야한다.
◻ 이 컬럼을 PK, FK등으로 사용함.
◻ 일대다 관계라고 한다.
+@ N+1 문제 해결 방법

FETCH 조인

N + 1 문제 해결 방법으로 Fetch Join
컬렉션 페치 조인, 일대다 관계인 @OneToMany로 연관관계를 가지는 Entity를 조회할 때 데이터 뻥튀기가 일어난다."

특징

◻ SQL 조인 종류 X
◻ JPQL에서 성능 최적화를 위해 제공하는 기능
◻ 연관된 엔티티나 컬렉션을 SQL 한 번에 함께 조회하는 기능

일반 조인과 차이점

◻ 일반 조인 실행 시 연관된 엔티티를 함께 조회하지 않음
◻ JPQL은 결과를 반환할 때 연관관계를 고려하지 않고, 단지 SELECT 절에 지정한 엔티티만 조회함
◻ 페치 조인을 사용할 때만 연관된 엔티티도 함께 조회(즉시 로딩)
◻ 페치 조인은 객체 그래프를 SQL 한 번에 조회하는 개념

INNER JOIN


select * from table as a 
INNER JOIN table as b
on a.id = b.id
where <~>;

두 테이블 간의 교집합을 의미한다.

OUTTER JOIN

A table의 컬럼만 보고 싶을때

select a.id , a.name, a.number from table as a
LEFT OUTER JOIN table as b 
on a.id = b.id
where B.ID IS NULL
;

B table의 컬럼만 보고 싶을때

select b.id , b.name, b.number from table as a
RIGHT OUTER JOIN table as b 
on a.id = b.id
where A.ID IS NULL
;

양쪽 접점이 없는 full outer에서 교집합을 뺐을때

select a.id , a.name, a.number,
       b.id , b.name, b.number 
       from table as a
FULL OUTER JOIN table as b 
on a.id = b.id
where A.ID IS NULL
AND B.ID IS NULL
;

FULL OUTER JOIN 가지고 있는 모든 데이터 확인

select *
       from table as a
FULL OUTER JOIN table as b 
on a.id = b.id
where <~>
;

이런식으로하면 A TABLE 컬럼과 교집합 내역이 확인 가능

select *from table as a
LEFT JOIN OR LEFT OUTER JOIN
table as b 
on a.id = b.id
where <~>
;

CROSS JOIN

select * from table1 
CROSS JOIN table2;

컬럼 갯수 * 컬럼 만큼 전체 행의 갯수가 결정된다.
cartesian product 카티션 곱이라고도 한다.

SELF JOIN

select * from table1 as a
INNTER JOIN table1 as b 
on a.id = b.id
where <~>
;

자기자신끼리 붙여서 조인 => 1개의 테이블을 사용한다.

참고

https://wangtak.tistory.com/30
https://pearlluck.tistory.com/46

profile
풀스택개발자가 될래요

0개의 댓글