Outer 는 붙여도 되고 안붙여도 됩니다.Null 이 존재할수 있습니다.
A와B테이블중 교집합 +A와 유사합니다.
Outer조인은 한쪽에만 데이터가 있어도 결과가 나옵니다.A테이블과 오른쪽B테이블의 전부가 매칭이 안되더라도
Null로 컬럼이 채워진다.
아래
SQL쿼리문 처럼 작성할수 있습니다.From절에ON키워드를 작성하여 조인 조건을 작성해야 합니다.SELECT * FROM A LEFT (OUTER) JOIN B ON A.id = B.id [WHERE 검색 조건]
➡ Left 조인의 반대인 Right 조인도 존재합니다. 방향만 반대일뿐 내용은 똑같습니다.
Null 행이 존재 하지 않습니다.Inner를 작성하지않고 Join만 작성할수 있으며, Inner Join 을 작성한 것과 동일합니다.Inner 조인을 사용할수 없는경우 Left 조인을 사용하면 됩니다.
A와B테이블의 교집합과 유사합니다.
A테이블과 오른쪽B테이블의 컬럼이 모두 매칭이 되어야 합니다.
아래
SQL쿼리문 처럼 작성할수 있습니다.From절에ON키워드를 작성하여 조인 조건을 작성해야 합니다.SELECT * FROM A (Inner) JOIN B ON A.id = B.id [WHERE 검색 조건]
mysql에서는 Full Outer 조인 대신 Union 키워드를 제공합니다.
A와B테이블의 합집합 개념과 유사합니다.
SELECT * FROM A Full Outer Join B
카티션 곱(CARTESIAN PRODUCT)라고도 합니다.
- 한쪽 테이블의 모든 행과 다른쪽 테이블의 모든 행을 조인 시키는 것입니다.
아래의
SQL쿼리문으로 작성할수 있습니다.SELECT * FROM A CROSS JOIN B
아래의
SQL쿼리문 처럼as,AS키워드를 사용해 별칭을 부여해줄수 있으며,
추후 쿼리문을 작성시a1.name등으로 별칭을 통해 작성해야 합니다.SELECT * FROM A as a1 CROSS JOIN B as b1
JPQL 대신 활용해 볼수 있는 프레임 워크 입니다. 실무에서 복잡한 쿼리나 동적 쿼리를 작성하는데 있어 도입해 볼만한 프레임 워크입니다.
(메소드 추출을 통해 재사용 용이)
JPQLString findName = "select m from Member m where m.username = :username";
▶ em은 EntityManager의 약자 입니다.
List<Member> memberNameList = em.createQuery(findName,Member.class).getResultList();
Query Dsl 적용String username = "shin";
List<Member> result = queryFactory
.select(member)
.from(member)
.where(usernameEq(username))
.fetch();
Query Dsl의 장점
1. 빌더 패턴으로 작성할수 있습니다 ➡ 가독성 증가
2. 컴파일 시점에 문법 오류를 확인할수 있습니다.
3.usernameEq와 같은 메소드를 사용할수 있습니다. (Eq는 Equals 입니다.)
➡ Spring 3.xx 버전에서의 Query Dsl 을 사용하려면 의존성 주입을 해줘야 합니다.
//querydsl 추가
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta"
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
- 의존성 추가후 오른쪽
Gradle탭에서 compile.java를 더블클릭합니다.- 프로젝트 파일의 build 패키지에서 쿼리 DSL에서 만들어준 Q~ 클래스를 확인할수 있습니다.
https://www.youtube.com/watch?v=pJqBR2TNe24
정말 좋은 글 감사합니다!