728x90
반응형
JPQL 조인
우리가 SQL 에서 조인을 사용하듯이 JPQL 에서도 조인을 사용할수 있다.
조인 개념
https://vprog1215.tistory.com/145?category=1012339
JPQL 조인의 종류
내부조인
SELECT m FROM Member m [INNER] JOIN m.team t
String innerJoinQuery = "select m from JPQLMember m join m.team t";
List<JPQLMember> innerJoinResult = em.createQuery(innerJoinQuery, JPQLMember.class)
.getResultList();
외부조인
SELECT m FROM Member m LEFT [OUTER] JOIN m.team t
String leftJoinQuery = "select m from JPQLMember m left join m.team t";
List<JPQLMember> lefterJoinResult = em.createQuery(leftJoinQuery, JPQLMember.class)
.getResultList();
세타조인
두개의 테이블을 모두 조회후 조건을 주어 필터링을 한다.
select count(m) from Member m, Team t where m.username = t.name
String thetaQuery = "select m from JPQLMember m, JPQLTeam t where m.username = t.name";
List<JPQLMember> thetaJoinResult = em.createQuery(thetaQuery, JPQLMember.class)
.getResultList();
조인 ON 절
조인을 하기전 대상을 필터링한다.
Where 과 다른점은 ON 을 쓰면 먼저 ON 조건에 맞는 가상테이블을 만들어 수행한다.
String onJoinQuery1 = "select m from JPQLMember m left join m.team t on t.name = 'teamA'";
List<JPQLMember> onJoinResult1 = em.createQuery(onJoinQuery1, JPQLMember.class)
.getResultList();
JPQL 서브쿼리
- WHERE, HAVING 절에서만 서브쿼리가 가능하다.
- 하지만 하이버네이트에서는 상관없다.
- FROM 정의 서브쿼리는 현재 JPQL 에서 불가능하다.
- Join 으로 풀거나 정 안되면 NativeSql을 써야한다.
String subQuery1 = "select m from JPQLMember m where m.age > (select avg(m2.age) from JPQLMember m2)";
List<JPQLMember> subQueryResult1 = em.createQuery(subQuery1, JPQLMember.class)
.getResultList();
참고
https://www.inflearn.com/course/ORM-JPA-Basic/lecture/21722?tab=note
728x90
반응형
'DataBase > JPA' 카테고리의 다른 글
[JPA] JPQL CASE (0) | 2021.09.25 |
---|---|
[JPA] JPQL TYPE (0) | 2021.09.24 |
[JPA] JPQL 페이징 (0) | 2021.09.24 |
[JPA] JPQL 프로젝션 (0) | 2021.09.24 |
[JPA] JPQL 문법 (0) | 2021.09.23 |
댓글