250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 힙
- dfs
- 데코레이터
- execute
- querydsl
- 스프링 폼
- 비관적락
- 지연로딩
- eager
- 연관관계
- 백트래킹
- 스토어드 프로시저
- JPQL
- 낙관적락
- exclusive lock
- 다대일
- FetchType
- fetch
- 이진탐색
- 유니크제약조건
- 연결리스트
- 다대다
- PS
- shared lock
- BOJ
- SQL프로그래밍
- CHECK OPTION
- 동적sql
- 즉시로딩
- 일대다
Archives
- Today
- Total
흰 스타렉스에서 내가 내리지
JPQL 서브쿼리, BETWEEN, IN, LIKE, NULL, 컬렉션 식 본문
728x90
# 서브쿼리
- 나이가 평균보다 많은 회원
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
이 쿼리는 컬렉션 값 연관 필드의 size 기능을 사용해도 같은 결과를 얻을 수 있다.
select m from Member m
where m.orders.size > 0
# 서브쿼리 - EXISTS
서브 쿼리에 결과가 존재하면 참이다. NOT 은 반대.
- 팀 A 소속의 회원
select m from Member m
where exists (select t from m.team t where t.name = '팀A')
# 서브쿼리 - {ALL | ANY | SOME}
- ALL : 조건을 모두 만족하면 참
- ANY | SOME : 조건을 하나라도 만족하면 참
- 전체 상품 각각의 재고보다 주문량이 많은 주문들
select o from Order o
where o.orderAmount > ALL (select p.stockAmount from Product p)
- 어떤 팀이든 팀에 소속된 회원
select m from member m
where m.team = ANY (select t from Team t)
# 서브 쿼리 - IN
- 서브 쿼리의 결과 중 하나라도 같은 것이 있으면 참.
- IN 은 서브쿼리가 아니어도 사용할 수 있다.
- 20세 이상을 보유한 팀
select t from Team t
where t IN (select t2 from Team t2 join t2.members m2 where m2.age >= 20)
# BETWEEN
- X [NOT] BETWEEN A AND B
- X는 A ~ B 사이의 값이면 참
- 나이가 10~20 인 회원을 찾기
select m from Member m
where m.age between 10 and 20
# IN
- 이름이 A 혹은 B 인 회원을 찾기
select m from Member m
where m.username in ('A', 'B')
# LIKE
- [NOT] LIKE 패턴값 [ESCAPE 이스케이프 문자]
- 문자 표현식과 패턴값을 비교한다.
- % : 아무 값들이 입력되어도 된다. 값이 없어도 됨
- _ : 한 글자는 아무 값이 입력되어도 되지만 값이 있어야 한다
select m from Member m
where m.username like '%원%'
-- 회원%
where m.username like '회원\%' ESCAPE '\'
# NULL 비교식
- IS [NOT] NULL
where m.username is null
# 컬렉션 식
- 컬렉션 식은 컬렉션에만 사용하는 특별한 기능이다.
# 빈 컬렉션 비교 식
- 주문이 하나라도 있는 회원 조회
-- JPQL
select m from Member m
where m.orders is not empty
-- SQL
select m.* from Member m
where
exists (
select o.id
from Orders o
where m.id = o.member_id
)
# 컬렉션의 멤버 식
- {엔티티나 값} [NOT] MEMBER [OF] {컬렉션 값 연관 경로}
- 엔티티나 값이 컬렉션에 포함되어 있으면 참
select t from Team t
where :memberParam member of t.members
'JPA' 카테고리의 다른 글
QueryDSL 세팅 (0) | 2024.04.14 |
---|---|
[JPQL] 조회해서 null 일 경우, 지정한 값을 반환하는 COALESCE (0) | 2024.04.14 |
페치 조인 :: join fetch (0) | 2024.04.13 |
JPQL 페이징 API (0) | 2024.04.13 |
JPQL 에서 new 를 이용하여 DTO 클래스로 변환하여 받기 (0) | 2024.04.13 |