프로젝트를 진행하면서 JPQL 과 QueryDsl 을 사용해보았지만 아직 능숙하지 않은거 같아 책을 보며 공부 했던 내용을 블로그 작성해보려 한다.
내부 조인 사용 예쩨
String teamName = "팀A";
String query = "SELECT m FROM Member m Inner JOIN m.team t"
+"WHERE t.name = :tem=amName";
List<Member> members = em.createQuery(query, Member.class)
.setParameter("teamname",teamName)
.getResultList();
SELCT m FROM Member m LEFT[OUTER] JOIN m.team t
일대다 관계나 다대다 관계처럼 컬렉션을 사용하는 곳에 조인하는 것을 컬렉션 조인이라 한다.
SELECT t, m FROM Team t, IN(t.members) m
SELECT t, m FROM Team t LEFT JOIN t.members m
여기서 t LEFT JOIN t.members 는 팀과 팀이 보유한 회원목록을 컬렉션 값 연관필드로 외부조인했다.
회원 이름이 팀 이름과 똑같은 사람 수를 구하는 예제
//JPQL
select count(m) from Member m, Team t
where m.username = t.name
//SQL
SELECT COUNT(M.ID)
FROM
MEMBER M CROSS JOIN TEAM T
WHERE
M.USERNAME=T.NAME
JOIN ON 절(JPA2.1)
/JPQL
select m,t from Member m
left join m.team t on t.name = 'A'
//SQL
SELECT m.*, t. * FROM Member m
LEFT JOIN Team t ON m.TEAM_ID=t. id and t.name=1A1
SQL 결과를 보면 and t.name = 'A' 로 조인 대상을 필터링 한다.
프로젝트 때 사용해본 건 한정적이지만 기회가 되면 적용해보고 싶다.
참고 : 자바 ORM 표준 JPA 프로그래밍