조인
내부 조인
SELECT m FROM Member m [INNER] JOIN m.team t
외부 조인
SELECT m FROM Member m LEFT [OUTER] JOIN m.team t
세타 조인
SELECT count(m) FROM Member m, Team t where m.username = t. name
조인 ON 절
ON의 기능
1. 조인 대상 필터링
2. 연관관계 없는 엔티티 외부 조인
기능 1번 예시)
예) 회원과 팀을 조인하면서 팀 이름이 A인 팀만 조인
SELECT m FROM Member m LEFT JOIN m.team t ON t = 'A';
여기서 ON은 JOIN을 할때의 조건이다 즉, 팀 이름이 A인 애들만 left 조인하고 싶다.
라는 의미이다.
기능 2번 예시)
예) 회원의 이름과 팀의 이름이 같은 대상 외부조인
SELECT m, t FROM Member m LEFT JOIN Team t ON m.username = t.name
서브 쿼리
ex)
나이가 평균보다 많은 회원 조회
SELECT m FROM Member m
WHERE m.age > (SELECT avg(m2.age) FROM Member m2)
서브쿼리 지원함수
- [NOT] EXISTS: 서브쿼리에 결과가 존재하면 참
- {ALL | ANY | SOME } (subquery)
- ALL은 모두 만족하면 참
- ANY, SOME: 같은의미, 조건을 하나라도 만족하면 참
- [NOT] IN (subquery): 서브쿼리의 결과 중 하나라도 같은 것이 있으면 참
ex) EXISTS
// 팀A 소속인 회원
Team team = new Team();
team.setName("팀A");
Member member = new Member();
member.setAge(10);
member.setUsername("정석우");
member.setTeam(team);
Member member1 = new Member();
member1.setAge(20);
member1.setUsername("정둘");
member1.setTeam(team);
em.persist(team);
em.persist(member1);
em.persist(member);
em.flush();
em.clear();
String query = "select m from Member m " +
"where exists (select t from m.team t where t.name = '팀A')";
List<Member> resultList = em.createQuery("select m from Member m where exists (select t from m.team t where t.name = '팀A')", Member.class)
.getResultList();
for (Member findMember : resultList) {
System.out.println("username = " + findMember.getUsername());
System.out.println("age = " + findMember.getAge());
}
결과 값
ex) ALL
전체 상품 각각의 재고보다 주문량이 많은 주문들
select o from Order o
where o.orderAmount > ALL (select p.stockAmount from Product p)
ex) ANY
어떤 팀이든 팀에 소속된 회원
select m from Member m
where m.team = ANY (select t from Team t)
JPA 서브 쿼리 한계
- JPA는 WEHRE, HAVING 절에서만 서브 쿼리 사용가능
이 게시물은 '자바 ORM 표준 JPA 프로그래밍' 강의를 수강하고 정리한 내용임을 밝힙니다.
출처: https://www.inflearn.com/course/ORM-JPA-Basic#
자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의
JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., 본 강의는 자바 백엔
www.inflearn.com