SQL에서 CROSS JOIN과 INNER JOIN


150

차이점은 무엇이며 CROSS JOIN그리고 INNER JOIN?

크로스 가입 :

SELECT 
    Movies.CustomerID, Movies.Movie, Customers.Age, 
    Customers.Gender, Customers.[Education Level], 
    Customers.[Internet Connection], Customers.[Marital Status], 
FROM   
    Customers 
CROSS JOIN 
    Movies

내부 가입 :

SELECT 
    Movies.CustomerID, Movies.Movie, Customers.Age, 
    Customers.Gender, Customers.[Education Level], 
    Customers.[Internet Connection], Customers.[Marital Status]
FROM   
    Customers 
INNER JOIN 
    Movies ON Customers.CustomerID = Movies.CustomerID

어느 것이 더 좋으며 왜 두 가지를 사용합니까?


15
CROSS JOIN가능한 모든 테이블 조합이 생성됩니다. 예를 들어 100 개의 행이있는 Table1과 100 개의 행이있는 Table2는 10000 개의 레코드를 생성합니다.
bummi

x CROSS JOIN yisx INNER JOIN y ON 1=1
philipxy

답변:


119

교차 조인은 행을 결합하지 않으며, 각 테이블에 100 개의 행이 1에서 1로 일치하면 10.000 개의 결과가 표시되며 동일한 상황에서 Innerjoin은 100 개의 행만 반환합니다.

이 두 예제는 동일한 결과를 반환합니다.

크로스 조인

select * from table1 cross join table2 where table1.id = table2.fk_id

내부 가입

select * from table1 join table2 on table1.id = table2.fk_id

마지막 방법을 사용하십시오


7
그리고 난 당신이 쓸 수있는 생각 select * from table1 cross join table2 where table1.id = table2.fk_id으로 select * from table1, table2 where table1.id = table2.fk_id(교체 cross join로모그래퍼 ,)
modulitos

5
@Lucas는 조인의 이전 구문이지만 작동합니다. 훨씬 더 읽기 쉬운 조항 버전을 권장합니다.
iliketocode

1
1 대 1 일치는 무엇을 의미합니까? "같은 상황"이란 무엇입니까
Jwan622

1
@iliketocode "이전 조인 구문"이 명확하지 않다면 SQL-89 및 SQL-92 표준에 대해 더 잘 이야기 할 것입니다.
Ivanzinho

INNER JOIN "100"은 설명하지 않은 일반적인 경우이며 일반적인 경우는 설명하지 않았습니다.
philipxy

186

Cross Join 및 Inner Join의 가장 좋은 예는 다음과 같습니다.

다음 표를 고려하십시오

표 : Teacher

x------------------------x
| TchrId   | TeacherName | 
x----------|-------------x
|    T1    |    Mary     |
|    T2    |    Jim      |
x------------------------x

표 : Student

x--------------------------------------x
|  StudId  |    TchrId   | StudentName | 
x----------|-------------|-------------x            
|    S1    |     T1      |    Vineeth  |
|    S2    |     T1      |    Unni     |
x--------------------------------------x

1. 내부 가입

내부 조인은 테이블을 모두 만족시키는 행을 선택합니다 .

수업 교사 인 교사와 해당 학생을 찾아야한다고 생각하십시오. 그 상태에서, 우리는 적용 할 필요가 JOIN또는 INNER JOIN과 의지

여기에 이미지 설명을 입력하십시오

질문

SELECT T.TchrId,T.TeacherName,S.StudentName 
FROM #Teacher T
INNER JOIN #Student S ON T.TchrId = S.TchrId

결과

x--------------------------------------x
|  TchrId  | TeacherName | StudentName | 
x----------|-------------|-------------x            
|    T1    |     Mary    |    Vineeth  |
|    T1    |     Mary    |    Unni     |
x--------------------------------------x

2. 크로스 가입

교차 조인은 첫 번째 테이블의 모든 행과 두 번째 테이블의 모든 행을 선택하고 직교 제품으로 표시합니다. 즉, 모든 가능성과 함께

학교의 모든 교사를 찾아야하며 수업 교사에 관계없이 학생을 찾아야합니다. CROSS JOIN.

여기에 이미지 설명을 입력하십시오

질문

SELECT T.TchrId,T.TeacherName,S.StudentName 
FROM #Teacher T
CROSS JOIN #Student S 

결과

x--------------------------------------x
|  TchrId  | TeacherName | StudentName | 
x----------|-------------|-------------x            
|    T2    |     Jim     |    Vineeth  |
|    T2    |     Jim     |    Unni     |
|    T1    |     Mary    |    Vineeth  |
|    T1    |     Mary    |    Unni     |
x--------------------------------------x

1
그림 2의 키는 복잡합니다. CROSS JOIN 인수의 인수 (색상 무관) 요소를 둘러싸고 있으며 숫자 (값과 무관)는 행이며 선 (색과 무관)은 결과 행입니다. 백으로서의 테이블의 경우 벤 다이어그램 이 아닙니다 . 값으로 행인 경우에는 잘못됩니다 . 요소로서 행의 경우 공유 할 수 없습니다 . 테이블 세트의 경우 벤 다이어그램이 필요 하지 않습니다 . 그림 1은 JOIN을 설명하기 위한 일반적인 끔찍한 시도입니다. 그것의 핵심은 또한 복잡합니다. 그것은 집합으로 테이블에 대해서만 있고 오직 하나의 값으로 만 결합하고; 또한 입력과 출력을 다르게 나타냅니다. 일반적으로 JOIN으로 작성 하십시오 .
philipxy

그림 1은 (INNER) JOIN vs LEFT, RIGHT & FULL (OUTER) JOIN에 대한 교차 원 벤 다이어그램의 4 가지 채색 중 첫 번째로 유용 하지만 CROSS JOIN 에는 유용 하지 않습니다 . 교차 행은 JOIN에 있고 왼쪽 / 오른쪽 행은 왼쪽 / 오른쪽 JOIN의 추가 (널 확장) 행입니다. 비 교차로에 행이없는 (INNER) JOIN의 특수한 경우로 CROSS JOIN 이 포함됩니다 .
philipxy

1
제안 해 주셔서 감사합니다. 여하튼, OP는이 두 조인의 차이점을 요구했습니다. 나는 초보자가 그들 사이의 차이점을 쉽게 이해할 수있는 방식 으로이 질문에 대답했습니다. 말했듯이 프로덕션 환경에서와 같이 키를 제공하지 않았습니다. 이해하기 쉬운 예일뿐입니다. 그리고에 대해 절이 주어 Cross Join지지 않으면 모든 행을 반환하지 않는다고 생각 Where합니까? 귀하의 의견에서 초보자가 혼란 스러울 수있는 더 많은 기회가 있습니다! @philipxy
Sarath Avanavu

1
나의 코멘트 다이어그램 하나는 그들이 말을 하려는지 알고있는 경우에도 해석하기 어려운 점을 지적 하고 이 주제에 부적절한. (그림 2 또는 1의) "키"는 "다이어그램의 부분이 무엇을 의미하는지에 대한 설명"을 의미했습니다. "쓰기"라는 말은 자신이 다이어그램의 일부가 무엇을 의미하는지 명확하게 쓰려고 노력한다는 것을 의미합니다. 다이어그램이 복잡하고 교차 조인과 내부 조인을 보여주지 않습니다! 즉, 그들은 당신의 대답에 속하지 않습니다. PS 테이블 관계형 키는 JOIN의 기능을 설명하는 데 아무런 역할을하지 않습니다. PPS 조인의 유일한 차이점은 INNER JOIN이 ON이라는 것입니다.
philipxy 2011

W3Schools w3schools.com/sql/sql_join_inner.asp 에서 INNER JOIN에 대해 비슷한 유형의 다이어그램을 제공 한 곳을 찾으십시오 . 댓글을 작성하기 전에 바로 확인하세요 @philipxy
Sarath Avanavu

69

CROSS JOIN = (INNER) JOIN = 쉼표 ( ",")

TL; DR SQL CROSS JOIN, (INNER) JOIN과 쉼표 ( ",") (평가 순서의 우선 순위가 낮은 쉼표 제외)의 유일한 차이점은 CRINS JOIN과 쉼표가 아닌 (INNER) JOIN은 ON입니다.


재 중간 제품

세 가지 모두는 각 테이블에서 가능한 모든 행 조합의 중간 개념 SQL 스타일 관계형 "카테 시안"제품 (일명 크로스 조인)을 생성합니다. 행 수를 줄이는 것은 ON 및 / 또는 WHERE입니다. SQL 바이올린

SQL 표준 제품 (7.5 1.b.ii)을 통한 <comma>, <comma> (7.7 1.a)를 통한 <cross join> 및 <comma> + WHERE (7.7 1.b)를 통한 <search condition>에 대해 정의합니다. ).

Wikipedia는 다음과 같이 말합니다.

크로스 조인

CROSS JOIN은 조인의 테이블에서 행의 카티 전 곱을 반환합니다. 즉, 첫 번째 테이블의 각 행과 두 번째 테이블의 각 행을 결합하는 행을 생성합니다.

내부 가입

[...] 결합 결과는 먼저 테이블에있는 모든 레코드의 카티 전 곱 (또는 교차 결합)을 가져온 다음 (표 A의 모든 레코드를 표 B의 모든 레코드와 결합) 결과로 정의 할 수 있습니다. 결합 술어를 만족시키는 모든 레코드

"암시 적 조인 표기법"은 단순히 SELECT 문의 FROM 절에 쉼표를 사용하여 분리하기위한 조인 테이블을 나열합니다. 따라서 크로스 조인을 지정합니다

외부 조인을 다시 사용하고 ON vs WHERE를 사용하면 LEFT JOIN (OUTER JOIN) 대 INNER JOIN의 조건을 참조하십시오 .

왜 테이블 간 열을 비교해야합니까?

중복 행이없는 경우 :

모든 테이블에는 특정 이름 공간 채우기 명령문 템플리트에서 실제 명령문을 작성하는 행이 있습니다. (그것은 진정한하게 제안 from-- 만족 --a 특정 (특성) 술어를 .)

  • 기본 테이블은 일부 DBA 제공 명령문 템플리트에서 실제 명령문을 작성하는 행을 보유합니다.

    /* rows where
    customer C.CustomerID has age C.Age and ...
    */
    FROM Customers C
  • 조인의 중간 제품에는 피연산자 템플릿의 AND에서 실제 내용을 나타내는 행이 있습니다.

    /* rows where
        customer C.CustomerID has age C.Age and ...
    AND movie M.Movie is rented by customer M.CustomerID and ...
    */
    FROM Customers C CROSS JOIN Movies M
  • 추가 템플릿을 제공하기 위해 ON & WHERE 조건이 AND됩니다. 값은 다시 해당 템플리트를 만족시키는 행입니다.

    /* rows where
        customer C.CustomerID has age C.Age and ...
    AND movie M.Movie is rented by customer M.CustomerID and ...
    AND C.CustomerID = M.CustomerID
    AND C.Age >= M.[Minimum Age]
    AND C.Age = 18
    */
    FROM Customers C INNER JOIN Movies M
    ON C.CustomerID = M.CustomerID
    AND C.Age >= M.[Minimum Age]
    WHERE C.Age = 18

특히, 테이블 간의 (SQL) 동일성에 대한 열을 비교하면 템플리트의 결합 된 테이블 부분에서 제품에서 유지 된 행이 해당 열에 대해 동일한 (NULL이 아닌) 값을 갖습니다. 많은 행이 일반적으로 테이블 간의 동일성 비교에 의해 제거된다는 것은 우연의 일치입니다. 필요하고 충분한 것은 원하는 행을 특성화하는 것입니다.

원하는 행의 템플릿에 대해 SQL을 작성하십시오!

쿼리 (및 테이블 대 조건)의 의미를 참조하십시오.
두 개의 다른 열에 대해 다른 SQL 테이블에서 일치하는 데이터를 얻는 방법 : 내부 조인 및 / 또는 연합?
사람이 읽을 수있는 설명으로부터 SQL 쿼리를 구성하는 경험 법칙이 있습니까?

"크로스 조인"오버로드

불행히도 "교차 조인"이라는 용어는 다음에 사용됩니다.

  • 중간 제품.
  • 크로스 가입.
  • (INNER) 한 테이블의 열과 다른 테이블의 열을 비교하지 않는 ON 또는 WHERE로 가입하십시오. (그러므로 많은 중간 제품 행이 반환되는 경향이 있습니다.)

이러한 다양한 의미가 혼란스러워집니다. (예를 들어 다른 답변과 의견에서와 같이)

CROSS JOIN vs (INNER) JOIN vs 쉼표 사용

일반적인 규칙은 다음과 같습니다.

  • 테이블 간 열을 비교하지 않는 경우에만 CROSS JOIN을 사용하십시오. 그것은 비교의 부족이 의도적 이었다는 것을 보여주는 것입니다.
  • 테이블 간 열을 비교할 때만 (INNER) JOIN을 ON으로 사용하십시오. (다른 조건도 가능)
  • 쉼표를 사용하지 마십시오.

일반적으로 테이블 쌍에없는 조건도 WHERE에 대해 유지됩니다. 그러나 RIGHT, LEFT 또는 FULL (OUTER) JOIN에 대한 인수에 대한 적절한 행을 얻으려면 (n INNER) JOIN ON에 넣어야 할 수도 있습니다.

다시 "쉼표를 사용하지 마십시오" 쉼표의 우선 순위가 낮기 때문에 명시적인 JOIN과 쉼표를 혼합하면 오도 될 수 있습니다. 그러나 CROSS JOIN, (INNER) JOIN 및 쉼표의 의미에서 중간 제품의 역할을 고려할 때 위 제품을 전혀 사용하지 않는다는 관례에 대한 주장은 흔들립니다. CROSS JOIN 또는 쉼표는 TRUE 조건에있는 (INNER) JOIN과 같습니다. 중간 제품 ON 및 WHERE는 모두 해당 술어에 AND를 도입합니다. 그러나 INNER JOIN ON은 ON 조건을 만족하는 입력 행 쌍을 찾을 때만 출력 행을 생성한다고 생각할 수 있지만 조건을 만족하는 크로스 조인 행을 반환합니다. ON SQL에서 쉼표를 보충해야하는 유일한 이유 OUTER 을 작성하는 것이 었습니다.가입하십시오. 물론 표현은 그 의미를 분명하게 만들어야합니다. 그러나 분명한 것은 무엇을 의미하는지에 달려 있습니다.

Revenn 다이어그램 두 개의 교차 원이있는 Venn 다이어그램 은 동일한 입력에 대한 INNER, LEFT, RIGHT & FULL JOIN의 출력 행 간 차이를 보여줍니다 . ON이 무조건 TRUE 인 경우 INNER JOIN 결과는 CROSS JOIN과 같습니다. 또한 INTERSECT, UNION & EXCEPT 의 입력 및 출력 행 을 설명 할 수 있습니다 . 두 입력에 동일한 열이 있으면 INTERSECT 결과는 표준 SQL NATURAL JOIN과 동일하며 EXCEPT 결과는 LEFT & RIGHT JOIN과 관련된 특정 관용구와 동일합니다. 그러나 (INNER) JOIN이 일반적으로 어떻게 작동하는지 는 설명 하지 않습니다 . 그건 그냥 언뜻 그럴듯하게 보인다 . 입력 및 / 또는 출력 부분 을 식별 할 수 있습니다.ON, PK (기본 키), FK (외부 키) 및 / 또는 SELECT의 특수한 경우 . 이를 확인하기 위해 해야것은 원으로 표현 된 세트의 요소가 정확히 무엇인지 식별 하는 것 입니다. (혼잡 한 프리젠 테이션은 결코 명확하지 않습니다.) (일반적으로 조인의 경우 출력 행은 입력 행과 제목이 다릅니다 . SQL 테이블은 NULL 이있는 행 세트 가 아닌 입니다.)


6
+1이 답변이 가장 좋아요-다른 사람들은 결과가 다를 것을 암시하는 것처럼 보이지만, "ON"절이 "WHERE"로 바뀌면 결과는 같습니다
Ronnie

4
+1 INNER JOIN에서 ON 절을 생략하면 CROSS JOIN
Cerno

"중간 개념적 SQL 스타일 카티 전 크로스 곱"- "실제로 주문 된 쌍 세트는 아니지만 '카테 시안 곱'이라고 말할 수는 없습니다." :) 비 수학자로서, 제가 'Cartesian product'라는 용어를 만난 유일한 상황은 누군가가 SQL을 설명 할 때 CROSS JOIN입니다. 나는 누군가가 이미 직교 제품에 익숙하지만 알아낼 수없는 SQL에 얼마나 자주 오는지 궁금합니다 CROSS JOIN.
onedaywhen

1
오퍼레이터 데카르트 곱이 일부 세트가 주어지면 일련의 튜플 세트를 리턴합니다. 결과는 직교 제품. 것을 사업자 관계형 및 SQL 문화 슬프게도 오용 / 과부하 "데카르트 제품" 연상 만이 아니다 직교 제품. 예를 들어 Wikipedia! 나는 단지 오도하고 혼란스럽게한다. 그러나 불행히도 여기서는 SQL 크로스 조인이 내 말로 어떻게 작동하고 위키 백과를 연기하는지에 대해 간단히 설명합니다. 결과를 "중간 개념적 SQL 스타일 데카르트 교차 곱" 이라고 레이블을 지정 합니다. 그렇습니다. "카테 시안"은 슬프게도 이미 타락한 사람들을위한 것입니다.
philipxy

1
높은 등급의 답변과 달리 정답입니다. SQL의 경우 언어의 기본 사항조차 이해하거나 정의하지 못하더라도 그림을 사용하여 피상적이고 합리적이며 형식이 잘 지정된 설명이 교육 내용을 지배하는 것이 일반적입니다.
Charles Roddie

23

내부 조인

조인 된 테이블 모두에서 일치하는 행만 표시하는 조인을 내부 조인이라고합니다. 쿼리 및 뷰 디자이너의 기본 조인입니다.

내부 조인 구문

SELECT t1.column_name,t2.column_name
FROM table_name1 t1
INNER JOIN table_name2 t2
ON t1.column_name=t2.column_name

크로스 조인

조인에 관련된 테이블의 카티 전 곱을 생성하는 크로스 조인입니다. 카티 전 곱의 크기는 첫 번째 테이블의 행 수에 두 번째 테이블의 행 수를 곱한 값입니다.

교차 결합에 대한 구문

SELECT * FROM table_name1
CROSS JOIN table_name2

아니면 다른 방법으로 쓸 수도 있습니다

SELECT * FROM table_name1,table_name2

이제 교차 조인에 대한 아래 쿼리를 확인하십시오.

SELECT * FROM UserDetails
CROSS JOIN OrderDetails

또는

SELECT * FROM UserDetails, OrderDetails


8

크로스 가입

이 기사 에서 설명했듯이 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

가능한 모든 순열 rankssuites쌍 을 생성합니다 .

| 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은 왼쪽 테이블에서 모든 요소를 ​​가져 와서 오른쪽 테이블의 레코드와 비교하여 다음을 수행합니다.

  • 오른쪽 테이블에서 일치하는 레코드가 없으면 결과 행에서 왼쪽 행이 필터링됩니다.
  • 오른쪽 테이블의 일치하는 레코드의 경우, 해당 레코드와 오른쪽 테이블의 모든 관련 하위 레코드 사이에 직교 곱이있는 것처럼 왼쪽 행이 반복됩니다.

예를 들어, 다음과 같은 부모 테이블 과 자식 테이블 간에 일대 다 테이블 관계 가 있다고 가정 합니다.postpost_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의 작동 방식에 대한 자세한 내용은 이 기사 도 확인하십시오 .


"INNER JOIN은 두 개의 결합 데이터 세트의 카티 전 곱을 리턴하지 않습니다"는 1 = 1의 x INNER JOIN y가 리턴 할 때 약간입니다. 당신이 말하려고 시도하는 것이 실제로 (물론) 조건 1 = 1을 반환 할 때 "대신"입니다. 글 머리 기호의 언어가 내부 조인 결과를 명확하게 설명하지는 않습니다. 그것을 설명하는 것은 조건을 충족시키지 않는 적은 행의 크로스 조인이라는 것입니다. 마찬가지로 "조합"을 사용하는 크로스 조인 언어는 명확하지 않습니다.
philipxy

7

SQL Server는 또한 다음과 같은 간단한 표기법을 채택합니다.

SELECT A.F, 
       B.G, 
       C.H 
  FROM TABLE_A A, 
       TABLE_B B, 
       TABLE_C C
 WHERE A.X = B.X 
   AND B.Y = C.Y

이 간단한 표기법을 사용하면 내부 조인과 교차 조인의 차이를 신경 쓸 필요가 없습니다. 두 개의 "ON"절 대신 작업을 수행하는 단일 "WHERE"절이 있습니다. 어느 "JOIN" "ON"절이 어디에 있는지 알아내는 데 어려움이 있으면 "JOIN"표기법을 버리고 위의 간단한 것을 사용하십시오.

부정 행위가 아닙니다.


2

내부 조인을 사용하여 쿼리를 작성하는 동안 두 테이블에서 조건이 만족되는 경우 레코드가 두 테이블에서 모두 페치됩니다 (예 : 두 테이블의 공통 열이 정확히 일치 함).

교차 조인을 사용하여 쿼리를 작성하는 동안 결과는 두 테이블의 레코드 수가없는 데카르트 곱과 같습니다. 예를 들어 table1에 2 개의 레코드가 있고 table2에 3 개의 레코드가 있으면 쿼리 결과는 2 * 3 = 6 레코드입니다.

따라서 필요할 때까지 크로스 조인하지 마십시오.


2
WHERE 절이 누락 된 경우에만!
epitka

2

교차 결합과 내부 결합은 내부 결합에서 직교 곱의 결과 중 일부를 부울하게 필터링한다는 점만 다릅니다.

table1
x--------------------------------------x
|  fieldA  |    fieldB   |    fieldC   | 
x----------|-------------|-------------x            
|    A     |      B      |    option1  |
|    A     |      B1     |    option2  |
x--------------------------------------x

table2
x--------------------------------------x
|  fieldA  |    fieldB   |    fieldC   | 
x----------|-------------|-------------x            
|    A     |      B      |    optionB1 |
|    A1    |      B1     |    optionB2 |
x--------------------------------------x

 cross join
  A,B,option1,A,B,optionB1
  A,B,option1,A1,B1,optionB2
  A,B1,option2,A,B,optionB1
  A,B1,option2,A1,B1,optionB2

 inner join on field1 (only with the value is the same in both tables)
  A,B,option1,A,B,optionB1
  A,B1,option2,A,B,optionB1

 inner join on field1
  A,B,option1,A,B,optionB1

데이터를 디자인 할 때 조인에 사용하는 필드의 경우가 하나만 있다고 결정합니다. 조인 만 두 테이블을 조인하고 특수 부울 식을 달성하는 행만 가져옵니다.

조인을 수행하는 필드가 두 테이블에서 모두 null 인 경우 필터를 전달합니다. 널을 피하거나 허용하기 위해 추가 규칙을 추가하는 것은 우리 또는 데이터베이스 제조업체의 책임입니다. 기본 사항을 준수하면 크로스 조인과 필터 만 있으면됩니다.


0

내부 조인은 두 테이블간에 일치하는 레코드의 결과를 제공하며 교차 조인으로 두 테이블간에 가능한 조합을 제공합니다.


0

A = {1,5,3,4,6,7,9,8} B = {2,8,5,4,3,6,9}

cross join 카티 전 곱 A로 작동 ✖ B = {1,2}, {1,8} ..., {5,2}, {5,8}, {5,5} ..... {3,3} ..., {6,6} .... {8,9}이 긴 결과 집합을 반환했습니다 ..

inner joinCartesian 제품을 통해 처리 할 때 일치하는 쌍을 선택하십시오.이 순서 쌍을 두 테이블의 기본 키로 생각하고 절에서 A = B를 검색하면inner join {5,5}, {4,4}, {6,6}을 선택하십시오. , {9,9} 및 이러한 ID와 관련된 select 절에서 요청 된 열을 반환했습니다.

cross joina = b 인 경우 결과는와 동일한 결과 집합 inner join입니다. 이 경우에도을 사용하십시오 inner join.


-1

예상 한 출력에 따라 다릅니다.

교차 조인은 한 테이블의 모든 행을 다른 테이블의 모든 행과 일치시킵니다. 내부 조인은 하나 이상의 필드에서 일치합니다. 하나의 테이블에 10 개의 행이 있고 다른 테이블에 10 개의 행이 있으면 두 개의 조인이 다르게 동작합니다.

교차 조인은 100 개의 행이 반환되며 관련이 없으며 직교 곱이라고합니다. 내부 조인은 서로 레코드를 일치시킵니다. 하나는 기본 키를 가지고 있고 다른 하나는 외래 키라고 가정하면 10 개의 행이 반환됩니다.

교차 조인은 일반 유틸리티에는 제한이 있지만 완전성을 위해 존재하며 쿼리에 관계가 추가되지 않은 테이블을 조인 한 결과를 설명합니다. 교차 조인을 사용하여 단어 또는 유사한 단어의 조합 목록을 만들 수 있습니다. 반면에 내부 조인이 가장 일반적인 조인입니다.


모든 사람을 혼동하지 마십시오. 나는 대답을 단축하려고 노력했다. 이것이 최선의 짧은 대답입니다.
Shrikant Jadhav
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.