✔ 내부 조인
ex )SELECT m FROM Member m [INNER] JOIN m.team t
- NULL 행이 존재하지 않는다. (Member는 있고 team이 없으면 조회 X)
- INNER는 생략 가능하다
A, B 둘다 겹치는 정보를 조인 하는것이 INNER 조인이다.
✔ 외부 조인
ex )SELECT m FROM Member m LEFT [OUTER] JOIN m.team t
- Member 엔티티를 왼쪽에 두고 겹치는 부분을 JOIN 한다
- NULL 이 존재
- OUTER 생략 가능
A, B 겹치는 정보와 왼쪽에있는 A의 정보까지 조인하는것이 LEFT (OUTER) 조인이다.
select count(m) from Member m, Team t where m.username = t.name
- 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 = 'A'
- JPQL
SELECT m, t FROM Member m LEFT JOIN Team t on m.username = t.name
- SQL
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)
EX ) 한 건이라도 주문한 고객
select m from Member m where (select count(o) from Order o where m = o.member) > 0
✔ !! 중요 FROM 절의 서브 쿼리는 현재 JPQL에서는 불가능 하다
JPA는 WHERE, HAVING 절에서만 서브쿼리 사용 가능