조인할 때는 항상 fetch 를 조심해야한다.
inner 랑 outer는 생략 가능하다.
EXISTS
: 서브쿼리에 결과가 존재하면 참
ALL
: 모두 만족하면 참
ANY, SOME
: 같은 의미, 조건을 하나라도 만족하면 참
IN
: 서브쿼리의 결과 중 하나라도 같은 것이 있으면 참
FROM 절의 서브 쿼리는 현재 불가능하다.
조인으로 풀 수 있으면 풀어서 해결하거나 쿼리를 두번 실행한다.
"select "
"case when m.age <= 10 then '학생요금'" +
"case when m.age >= 65 then '경로요금'" +
" else '일반요금' " +
"end " +
from Member m
coalesce
: coalesce(m.name, 'something') m.name 의 값이 없으면 두번째 인자의 값을 반환한다.
nullif
: nullif(m.name, 'admin') m.name 이 'admin' 이라면 null을 반환한다.
쿼리 한 번으로 여러 테이블 로우 변경(엔티티) 한다.
excuteUpdate()
의 결과는 영향받은 엔티티 수 반환한다.
벌크연산은 영속성 컨텍스트는 반영하지 않고, 데이터베이스에만 반영하기 때문에 정합성 문제가 발생한다.