◻ 둘 이상의 테이블을 연결해서 데이터를 검색하는 방법.
◻ 적어도 하나의 컬럼을 공유하고 있어야한다.
◻ 이 컬럼을 PK, FK등으로 사용함.
◻ 일대다 관계라고 한다.
+@ N+1 문제 해결 방법
FETCH 조인
N + 1 문제 해결 방법으로 Fetch Join
컬렉션 페치 조인, 일대다 관계인 @OneToMany로 연관관계를 가지는 Entity를 조회할 때 데이터 뻥튀기가 일어난다."
특징
◻ SQL 조인 종류 X
◻ JPQL에서 성능 최적화를 위해 제공하는 기능
◻ 연관된 엔티티나 컬렉션을 SQL 한 번에 함께 조회하는 기능
일반 조인과 차이점
◻ 일반 조인 실행 시 연관된 엔티티를 함께 조회하지 않음
◻ JPQL은 결과를 반환할 때 연관관계를 고려하지 않고, 단지 SELECT 절에 지정한 엔티티만 조회함
◻ 페치 조인을 사용할 때만 연관된 엔티티도 함께 조회(즉시 로딩)
◻ 페치 조인은 객체 그래프를 SQL 한 번에 조회하는 개념
select * from table as a
INNER JOIN table as b
on a.id = b.id
where <~>;
두 테이블 간의 교집합을 의미한다.
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 <~>
;
select * from table1
CROSS JOIN table2;
컬럼 갯수 * 컬럼 만큼 전체 행의 갯수가 결정된다.
cartesian product 카티션 곱이라고도 한다.
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