조인#
- 내부(inner) 조인
SELECT m FROM Member m [INNER] JOIN m.team t
- 외부(left) 조인
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절#
조인 대상 필터링
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 and t.name='A'
연관관계 없는 엔티티 외부 조인
JPQL :
SELECT m, t FROM Member m LEFT JOIN TEAM t on m.username = t.nameSQL :SELECT m.*, t.* FROM Member m LEFT JOIn TEAM t ON m.username = t.name
서브쿼리#
- 나이가 평균보다 많은 회원
select m from Member m
where m.age > (select avg(m2.age) from Member m2)- 한 건이라도 주문한 고객
select m from Member m
where (select count(o) from Order o where m = o.member) > 0*{ALL | ANY | SOME}, EXISTS, IN 등 사용 가능 *
인라인뷰(FROM절 서브쿼리)는 불가 = > 웬만하면 조인으로 풀어서 해결
타입 표현#
- 문자 :
'HELLO',She''s'
- 숫자: 1
[L|D|F] - Boolean:
TRUE /FALSE - Enum : 패키지명 포함
- 엔티티 :
TYPE(m) = Member(상속관계일때)
CASE, COALESCE, NULLIF 사용 가능
기본 함수#
- 기본적으로 공통 제공 :
CONCAT,SUBSTRING,TRIM,LOWER/UPPER,LENGTH,LOCATE,SIZE,INDEX…
- 웬만한 DB의 함수들은 (DB종속적이긴 하지만) 등록되어 있음
정안되면
NativeQuery()도 있음