크로스 가입
이 기사 에서 설명했듯이 CROSS JOIN은 직교 곱을 생성하기위한 것입니다.
카티 전 곱은 두 세트의 A와 B를 취하여 주어진 두 데이터 세트에서 쌍 레코드의 가능한 모든 순열을 생성합니다.
예를 들어 다음 ranks
과 같은 suits
데이터베이스 테이블 이 있다고 가정합니다 .
그리고 ranks
다음과 같은 행이 있습니다.
| name | symbol | rank_value |
|-------|--------|------------|
| Ace | A | 14 |
| King | K | 13 |
| Queen | Q | 12 |
| Jack | J | 11 |
| Ten | 10 | 10 |
| Nine | 9 | 9 |
suits
테이블에 다음 레코드가 포함되어 있지만
| name | symbol |
|---------|--------|
| Club | ♣ |
| Diamond | ♦ |
| Heart | ♥ |
| Spade | ♠ |
다음과 같은 CROSS JOIN 쿼리로 :
SELECT
r.symbol AS card_rank,
s.symbol AS card_suit
FROM
ranks r
CROSS JOIN
suits s
가능한 모든 순열 ranks
과 suites
쌍 을 생성합니다 .
| card_rank | card_suit |
|-----------|-----------|
| A | ♣ |
| A | ♦ |
| A | ♥ |
| A | ♠ |
| K | ♣ |
| K | ♦ |
| K | ♥ |
| K | ♠ |
| Q | ♣ |
| Q | ♦ |
| Q | ♥ |
| Q | ♠ |
| J | ♣ |
| J | ♦ |
| J | ♥ |
| J | ♠ |
| 10 | ♣ |
| 10 | ♦ |
| 10 | ♥ |
| 10 | ♠ |
| 9 | ♣ |
| 9 | ♦ |
| 9 | ♥ |
| 9 | ♠ |
내부 가입
반면에, INNER JOIN은 두 개의 결합 데이터 세트의 카티 전 곱을 반환하지 않습니다.
대신 INNER JOIN은 왼쪽 테이블에서 모든 요소를 가져 와서 오른쪽 테이블의 레코드와 비교하여 다음을 수행합니다.
- 오른쪽 테이블에서 일치하는 레코드가 없으면 결과 행에서 왼쪽 행이 필터링됩니다.
- 오른쪽 테이블의 일치하는 레코드의 경우, 해당 레코드와 오른쪽 테이블의 모든 관련 하위 레코드 사이에 직교 곱이있는 것처럼 왼쪽 행이 반복됩니다.
예를 들어, 다음과 같은 부모 테이블 과 자식 테이블 간에 일대 다 테이블 관계 가 있다고 가정 합니다.post
post_comment
이제 post
테이블에 다음 레코드가있는 경우 :
| id | title |
|----|-----------|
| 1 | Java |
| 2 | Hibernate |
| 3 | JPA |
그리고 post_comments
표는 행이 있습니다 :
| id | review | post_id |
|----|-----------|---------|
| 1 | Good | 1 |
| 2 | Excellent | 1 |
| 3 | Awesome | 2 |
다음과 같은 INNER JOIN 쿼리
SELECT
p.id AS post_id,
p.title AS post_title,
pc.review AS review
FROM post p
INNER JOIN post_comment pc ON pc.post_id = p.id
모든 관련 post
레코드와 함께 모든 레코드 를 포함 시킵니다 post_comments
.
| post_id | post_title | review |
|---------|------------|-----------|
| 1 | Java | Good |
| 1 | Java | Excellent |
| 2 | Hibernate | Awesome |
기본적으로 INNER JOIN은 일치하는 레코드 만 최종 결과 집합에 유지되는 필터링 된 CROSS JOIN으로 생각할 수 있습니다.
INNER JOIN의 작동 방식에 대한 자세한 내용은 이 기사 도 확인하십시오 .
CROSS JOIN
가능한 모든 테이블 조합이 생성됩니다. 예를 들어 100 개의 행이있는 Table1과 100 개의 행이있는 Table2는 10000 개의 레코드를 생성합니다.