SELECT 절에 조회할 대상을 지정하는 것
SELECT m FROM Member m -> 엔티티 프로젝션
SELECT m.team FROM Member m -> 엔티티 프로젝션
SELECT m.address FROM Member m -> 임베디드 타입 프로젝션
SELECT m.username, m.age FROM Member m -> 스칼라 타입 프로젝션
setFirstResult() : 결과로 나올 전체 데이터 중에서의 시작위치
setMaxResults(): 조회할 데이터수
1. 내부조인(inner join)
= SELECT m FROM Member m [INNER] JOIN m.team t
= 멤버는 있고 팀이 없을 때 아예 안나온다
2. 외부조인(left outter join)
= SELECT m FROM Member m LEFT [OUTER] JOIN m.team t
= 멤버는 있고 팀이 없을 때 멤버만 나온다
3. 세타조인
= select count(m) from Member m, Team t where m.username =t.name
= 연관관계없는 테이블 비교할때
조인 대상 필터링(조건걸기)
연관관계 없는 엔티티 외부 조인(하이버네이트 5.1부터
일반적인 SQL 서브 쿼리와 같다
메인쿼리와 서브쿼리는 서로 전혀 관계가없다. // 메인쿼리에서 서브쿼리로 끌고오면 성능이 잘안나온다
JPA는 WHERE, HAVING 절에서만 서브 쿼리 사용가능
SELECT 절도 가능
자바 Switch case 와 매우 흡사
사용법이 쉬우므로 자세한 설명은 생략한다.
-> 하나씩 조회해서 null이 아니면 반환
-> 두 값이 같으면 null 반환, 다르면 첫번째 값 반환
우리가 써왔던 함수들 기능과 매우 흡사하다
DB종석적이라 DB를바꾸면 못쓸수잇다.
DB종속적이지만 많은 함수들이 등록 되있다. 제공하지 않은 함수들은 함수를 등록해야한다.
따로 패키지를 만들어서 등록 해줘야한다.
우리가 새로운 함수를 정의하는게 아니고 DB에 원래 있던 함수들을 JPQL에 추가해 주는것임
-> 쿼리문에 이런 함수들을 쓸수있다는 점은 전혀 몰랐던 사실이라 신기했다. JPQL 은 기존에 사용했던 쿼리문과 매우 흡사하여 자세한 설명은 생략했다. Spring Data Jpa를 먼저 배우고 다시 뒤로 온 입장으로써 Spring Data Jpa만 알았을 당시의 퍼즐들이 서서히 맞춰지고 채워지는 느낌이든다. 이래서 기초가 중요하구나 또 한번 느꼈다.