| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
- javaJVM
- 프로그래머스제일작은수
- java최솟값구하기
- 격파르타합격후기
- java set 출력
- 항해15기
- 격파르타장점
- 노베이스부트캠프
- java 자료구조 활용
- 작은수제거하기
- 격파르타후기
- java list 저장
- 비전공자sqld
- java알고리즘문제풀이
- 코딩부트캠프후기
- 프로그래머스
- java list 출력
- java set 저장
- 컴파일
- sqld자격증합격
- java map
- 격파르타비전공자
- 항해99후기
- java map 저장
- javaJRE
- java map 출력
- 인터프린터언어
- java참조자료형
- java기본자료형
- java알고리즘
- Today
- Total
코딩과 결혼합니다
[JPA] Join 문법 본문
JOIN
데이터베이스에서 여러 테이블을 연결하여 관련된 데이터를 함께 가져오는데 사용된다.
JOIN 절은 크게 INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN 으로 나눌 수 있다.
INNER JOIN
String jpql = "SELECT e FROM Employee e INNER JOIN e.department d WHERE d.name = 'IT'";
TypedQuery<Employee> query = entityManager.createQuery(jpql, Employee.class);
List<Employee> resultList = query.getResultList();
"Employee" 엔티티와 "Department" 엔티티를 이너조인하여 부서 이름이 'IT'인 직원들을 가져오기
이너 조인은 연결된 엔티티 간의 공통된 값을 기준으로 매칭되는 결과를 반환한다. 이너조인을 사용하면 연결된 엔티티 중에서 매칭되는 결과만 가져올 수 있다.
LEFT JOIN
String jpql = "SELECT c FROM Customer c LEFT JOIN c.orders o WHERE o.totalAmount > 1000";
TypedQuery<Customer> query = entityManager.createQuery(jpql, Customer.class);
List<Customer> resultList = query.getResultList();
"Customer" 엔티티와 "Order" 엔티티를 레프트 조인하여 주문 금액이 1000보다 큰 고객을 가져오기.
모든 고객 정보와 주문 정보가 함께 반환되며, 주문 정보가 없는 고객은 NULL 값을 가진다.
왼쪽(기준) 엔티티를 기준으로 오른쪽 엔티티를 연결한다. 기준 엔티티의 모든 레코드와 매칭되는 오른쪽 엔티티의 레코드를 가져올 수 있다. 오른쪽 엔티티에 매칭되는 값이 없으면 NULL 값을 가진다.
RIGHT JOIN
String jpql = "SELECT d FROM Department d RIGHT JOIN d.employees e WHERE e.salary > 5000";
TypedQuery<Department> query = entityManager.createQuery(jpql, Department.class);
List<Department> resultList = query.getResultList();
"Department" 엔티티와 "Employee" 엔티티를 라이트 조인하여 급여가 5000보다 큰 직원들이 속한 부서를 가져오기.
모든 부서 정보와 직원 정보가 함께 반환되며, 직원 정보가 없는 부서는 NULL 값을 가진다.
왼쪽(기준) 엔티티와 오른쪽 엔티티를 연결하는데, 라이트 조인을 사용하면 오른쪽 엔티티의 모든 레코드와 매칭되는 왼쪽 엔티티의 레코드를 가져올 수 있다. 왼쪽 엔티티에 매칭되는 값이 없으면 NULL 값을 가진다.
FULL JOIN
String jpql = "SELECT p FROM Product p LEFT JOIN p.reviews r WHERE r.rating > 4.5 UNION SELECT p FROM Product p RIGHT JOIN p.reviews r WHERE r.rating > 4.5";
TypedQuery<Product> query = entityManager.createQuery(jpql, Product.class);
List<Product> resultList = query.getResultList();
JPQL은 공식적으로 FULL JOIN을 지원하지 않는다. 하지만 LEFT JOIN과 RIGHT JOIN을 결합하여 유사한 동작을 구현할 수 있다.
"Product" 엔티티와 "Review" 엔티티를 LEFT JOIN과 RIGHT JOIN을 결합하여 평점이 4.5보다 높은 제품들과 해당 제품의 리뷰 정보를 가져오기.
왼쪽과 오른쪽 엔티티 간의 모든 레코드를 연결한다. 풀 조인을 사용하면 양쪽 엔티티의 모든 레코드를 가져올 수 있다. 매칭되는 값이 없는 경우에도 NULL 값을 가진다.
'2세 > JPA' 카테고리의 다른 글
| [Spring Data JPA] 쿼리 메서드(3) (0) | 2024.03.03 |
|---|---|
| [Spring Data JPA] 쿼리 메서드(2) (0) | 2024.02.29 |
| [Spring Data JPA] 쿼리 메서드 (0) | 2024.02.28 |
| [Spring Data JPA] 순수 JPA와 Spring Data JPA (0) | 2024.02.27 |
| [JPA] 컬렉션 조회 최적화(1) (0) | 2024.02.25 |