조인은 튜닝에 있어서 정말 중요한 요소를 차지한다. 제대로 알아두자.


조인은 크게 내부(inner)조인, 외부(outer)조인, 세타(theta)조인이 있다. 세타조인은 외래키로 해당사항이 없는 서로 두 테이블을 조인하는 것인데, 여기서 조인 조건이 빠지면 카르테시안 곱으로 이루어지는 조인을 세타조인이라고 한다. 크로스조인, 막조인이라고 하기도 한다.

1. 내부 조인

String jpql = "select m from Member m inner join m.team t";
String jpql = "select m from Member m inner join m.team t where t.name = :teamName";
            
List<Member> result = em.createQuery(jpql, Member.class)
         	 							.getResultList();

where절 또는 on절에 조건을 넣어서 내부 조인이 가능하다.

2. 외부 조인

String jpql = "select m from Member m left outer join m.team t";
String jpql = "select m from Member m left join m.team t";
String jpql = "select m from Member m left outer join Team t on m.username = t.name";";
String jpql = "select m from Member m left join Team t on m.username = t.name";

List<Member> result = em.createQuery(jpql, Member.class)
       									.getResultList();

마찬가지로 SQL이랑 거의 같다.

3. 연관관계 X 외부 조인

 String jpql = "select m from Member m left join Team t on m.username = t.name";
           
List<Member> result = em.createQuery(jpql, Member.class)
			             			.getResultList();

의미상으로는 말도 안되는 쿼리지만, 이런 엔티티 간에 연관관계가 없는 외부조인도 가능하다.