조인

SQL 조인과 비슷하지만 차이가 있다면 객체(엔티티) 중심으로 쿼리가 나간다!

조인을 할 땐 묵시적 조인이 아니라 명시적으로 해야한다!!! 최대한 SQL 조인 쿼리문과 비슷하게 작성하는 것이 좋다! 조인 쿼리가 성능에 영향을 주기 때문에 튜닝 요소인 점을 기억하자!

아래 내용은 SQL 기초이기 때문에 SQL 잘 모른다면 찾아서 공부해야한다^^

  • 내부 조인 : (INNER) JOIN SELECT m FROM Member m [INNER] JOIN m.team t Member는 있고 Team이 없으면 데이터 안 나옴.

  • 외부 조인
 : LEFT (OUTER) JOIN SELECT m FROM Member m LEFT [OUTER] JOIN m.team t Member는 있고 Team이 없어도 Team데이터 null로 되고 Member와 조인 가능.

  • 세타 조인 
 select count(m) from Member m, Team t where m.username= t.name 아무런 연관관계가 없을 때. Member와 Team 모두 from에서 select 절에 넣는다. Member X Team cross join이라고 나온다!

theta join 쿼리 확인

주의 사항‼️❣️

Member와 Team은 다대일 관계이기 때문에 Member 클래스 내에서 @ManyToOne으로 매핑되어있다. 디폴트 fetch 타입은 EAGER이므로 Member가 조회될 때 Team도 함께 조회되버리기 때문에 LAZY로 변경해주어야한다!!!

ON : Join할 때 조건. 조인 대상 필터링. ex) 회원과 팀을 조인하면서 팀 이름이 A인 팀만 조인.

  1. JPQL

    SELECT m, t FROM Member m LEFT JOIN m.team t on t.name = 'A' 

  2. SQL PK와 FK 조인

    SELECT m.*, t.* FROM 
    Member m LEFT JOIN Team t ON m.TEAM_ID=t.id and t.name='A'

연관관계 없는 엔티티 외부 조인 ex) 회원의 이름과 팀의 이름이 같은 대상 외부 조인

  1. JPQL

    SELECT m, t FROM

    Member m LEFT JOIN Team t on m.username = t.name

  2. SQL PK와 FK 조인

    SELECT m.*, t.* FROM 
    Member m LEFT JOIN Team t ON m.username = t.name

Last updated

Was this helpful?