Per ardua ad astra !
I'm On My Way
Per ardua ad astra !
전체 방문자
오늘
어제
  • 분류 전체보기 (126)
    • Algorithm (50)
      • 백준 (30)
      • SWEA (3)
      • JUNGOL (3)
      • Programmers (5)
      • LeetCode (2)
    • 안드로이드 개발 (6)
      • Java로 개발 (0)
      • Kotlin으로 개발 (3)
    • Spring (41)
      • Spring기본 (17)
      • JPA기본 (15)
      • JPA활용 SpringBoot 기본 (9)
      • API 개발 기본 (0)
    • 네트워크 (3)
    • 운영체제 (0)
    • Life (3)
      • 책 (0)
      • 자기계발 (1)
      • 일상 (2)
    • 노마드코더 (3)
      • python으로 웹 스크래퍼 만들기 (3)
    • 프로그래밍 언어 (17)
      • Java 기본 (2)
      • 코틀린 기본 (15)

블로그 메뉴

  • 홈
  • 방명록

인기 글

hELLO · Designed By 정상우.
Per ardua ad astra !

I'm On My Way

Spring/JPA기본

JPQL 조인, 서브쿼리

2021. 8. 1. 16:05

조인

내부 조인
SELECT m FROM Member m [INNER] JOIN m.team t

외부 조인
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 절

 

ON의 기능
1. 조인 대상 필터링
2. 연관관계 없는 엔티티 외부 조인 

기능 1번 예시)
예) 회원과 팀을 조인하면서 팀 이름이 A인 팀만 조인
SELECT m FROM Member m LEFT JOIN m.team t ON t = 'A';

여기서 ON은 JOIN을 할때의 조건이다 즉, 팀 이름이 A인 애들만 left 조인하고 싶다.
라는 의미이다. 

기능 2번 예시)
예) 회원의 이름과 팀의 이름이 같은 대상 외부조인
SELECT m, t FROM Member m LEFT JOIN Team t ON m.username = t.name

 


서브 쿼리


ex)
나이가 평균보다 많은 회원 조회

SELECT m FROM Member m 
WHERE m.age > (SELECT avg(m2.age) FROM Member m2)

 


서브쿼리 지원함수


- [NOT] EXISTS: 서브쿼리에 결과가 존재하면 참
- {ALL | ANY | SOME } (subquery)
- ALL은 모두 만족하면 참
- ANY, SOME: 같은의미, 조건을 하나라도 만족하면 참
- [NOT] IN (subquery): 서브쿼리의 결과 중 하나라도 같은 것이 있으면 참


ex)  EXISTS

            // 팀A 소속인 회원
            Team team = new Team();
            team.setName("팀A");

            Member member = new Member();
            member.setAge(10);
            member.setUsername("정석우");
            member.setTeam(team);

            Member member1 = new Member();
            member1.setAge(20);
            member1.setUsername("정둘");
            member1.setTeam(team);

            em.persist(team);
            em.persist(member1);
            em.persist(member);


            em.flush();
            em.clear();

            String query = "select m from Member m " +
                    "where exists (select t from m.team t where t.name = '팀A')";
            List<Member> resultList = em.createQuery("select m from Member m where exists (select t from m.team t where t.name = '팀A')", Member.class)
                    .getResultList();
            for (Member findMember : resultList) {
                System.out.println("username = " + findMember.getUsername());
                System.out.println("age = " + findMember.getAge());
            }

 

결과 값

 


ex) ALL

전체 상품 각각의 재고보다 주문량이 많은 주문들
select o from Order o 
where o.orderAmount > ALL (select p.stockAmount from Product p) 

 


ex) ANY

어떤 팀이든 팀에 소속된 회원
select m from Member m 
where m.team = ANY (select t from Team t)

 


JPA 서브 쿼리 한계

- JPA는 WEHRE, HAVING 절에서만 서브 쿼리 사용가능 

 

 

이 게시물은 '자바 ORM 표준 JPA 프로그래밍' 강의를 수강하고 정리한 내용임을 밝힙니다. 
출처: https://www.inflearn.com/course/ORM-JPA-Basic#

 

자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의

JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., 본 강의는 자바 백엔

www.inflearn.com

 

    'Spring/JPA기본' 카테고리의 다른 글
    • JPQL의 페치 조인 (Fetch Join)
    • JPQL 타입과 기타식, CASE 사용 방법, JPQL의 기본함수와 사용자 설정함수
    • JPQL를 통한 조회, 페이징
    • 객체지향 쿼리 언어 소개(JPQL, QueryDSL, NativeQuery)
    Per ardua ad astra !
    Per ardua ad astra !
    개발자 지망생이며 열심히 공부하고 기억하기 위한 블로그입니다.

    티스토리툴바