답변:
교차 조인은 두 테이블간에 직교 곱을 만들어 모든 행의 가능한 모든 조합을 반환합니다. on
모든 것을 모든 것에 합류시키기 때문에 절이 없습니다 .
A full outer join
는 a left outer
와 right outer
join 의 조합입니다 . 쿼리의 where
절 과 일치하는 두 테이블의 모든 행을 반환하며 해당 행에 대한 on
조건을 만족할 수없는 null
경우 채워지지 않은 필드 에 값을 넣습니다 .
이 위키 백과 기사는 샘플 테이블 세트가 제공된 출력 예제와 함께 다양한 유형의 조인에 대해 설명합니다.
outer join
빠르거나 cross join
?
빈 테이블 (또는 결과 집합)과의 크로스 조인은 빈 테이블 (M x N; 따라서 M x 0 = 0)이됩니다.
전체 외부 조인에는 M과 N이 모두 0이 아닌 한 항상 행이 있습니다.
하나의 중요한 측면을 다른 답변에 추가하고 싶습니다. 실제로이 주제를 가장 좋은 방법으로 설명했습니다.
2 개의 조인 된 테이블에 M 및 N 개의 행이 포함 된 경우 교차 조인은 항상 (M x N) 행을 생성하지만 완전 외부 조인은 MAX (M, N)에서 (M + N) 행을 생성합니다 (실제로 행 수에 따라 다름) "on"술어와 일치).
편집하다:
논리적 쿼리 처리 관점에서 CROSS JOIN은 실제로 항상 M x N 행을 생성합니다. FULL OUTER JOIN에서 발생하는 일은 왼쪽 및 오른쪽 조인이 모두 발생한 것처럼 왼쪽 및 오른쪽 테이블이 모두 "보존"된다는 것입니다. 따라서 왼쪽 및 오른쪽 테이블의 ON 술어를 만족시키지 않는 행이 결과 세트에 추가됩니다.
cross join
배수는 테이블입니다. A는 full outer join
... 일치하는 행 수에 따라 최악의 경우 추가합니다
교차 조인 : 교차 조인은 두 개 이상의 테이블에서 모든 행 조합으로 구성된 결과를 생성합니다. 즉, 테이블 A에 3 개의 행이 있고 테이블 B에 2 개의 행이 있으면 CROSS JOIN이 6 개의 행을 생성합니다. 두 테이블 간에는 관계가 없습니다. 문자 그대로 가능한 모든 조합을 생성하면됩니다.
완전 외부 조인 : 전체 외부 조인은 "왼쪽"도 "오른쪽"도 아닙니다. 둘 다입니다! JOIN에 참여하는 두 테이블 또는 결과 세트의 모든 행이 포함됩니다. JOIN의 "왼쪽"에있는 행에 대해 일치하는 행이 없으면 "오른쪽"에 결과 집합의 Null 값이 표시됩니다. 반대로 JOIN의 "오른쪽"행에 일치하는 행이 없으면 "왼쪽"의 결과 집합에 Null 값이 표시됩니다.
SQL Server의 CROSS JOIN and FULL OUTER JOIN
경우 다릅니다.
CROSS JOIN
필터 기준 또는 조건에 관계없이 단순히 두 테이블의 직교 곱입니다.
FULL OUTER JOIN
LEFT OUTER JOIN and RIGHT OUTER JOIN
두 테이블 의 고유 한 결과 집합을 제공합니다 . 또한 두 개의 테이블 열을 맵핑하려면 ON 절이 필요합니다.
표 1에는 10 개의 행이 있고 표 2에는 20 개의 행이 있으며 특정 열에 5 개의 행이 일치합니다.
그런 다음
CROSS JOIN
결과 집합에 10 * 20 = 200 개의 행을 반환합니다.
FULL OUTER JOIN
결과 집합에 25 개의 행을 반환합니다.
FULL OUTER JOIN
(또는 다른 JOIN)은 항상보다 작거나 같은 결과 집합을 반환합니다Cartesian Product number
.행의 수에 의해 반환
FULL OUTER JOIN
(의해 행 번호 동일LEFT OUTER JOIN
) + (의해 행 번호RIGHT OUTER JOIN
(행 번호에 의해 -)INNER JOIN
).
반환 된 NULL 값을 제외하고는 동일한 개념입니다.
아래를보십시오 :
declare @table1 table( col1 int, col2 int );
insert into @table1 select 1, 11 union all select 2, 22;
declare @table2 table ( col1 int, col2 int );
insert into @table2 select 10, 101 union all select 2, 202;
select
t1.*,
t2.*
from @table1 t1
full outer join @table2 t2 on t1.col1 = t2.col1
order by t1.col1, t2.col1;
/* full outer join
col1 col2 col1 col2
----------- ----------- ----------- -----------
NULL NULL 10 101
1 11 NULL NULL
2 22 2 202
*/
select
t1.*,
t2.*
from @table1 t1
cross join @table2 t2
order by t1.col1, t2.col1;
/* cross join
col1 col2 col1 col2
----------- ----------- ----------- -----------
1 11 2 202
1 11 10 101
2 22 2 202
2 22 10 101
*/
크로스 조인 : http://www.dba-oracle.com/t_garmany_9_sql_cross_join.htm
TLDR;2 개의 테이블 (Carthesian 제품)간에 가능한 모든 조합을 생성합니다.
(전체) 외부 참여 : http://www.w3schools.com/Sql/sql_join_full.asp
TLDR; 두 테이블의 모든 행과 동일한 값을 갖는 결과를 반환합니다 (CONDITION에서 일치).
다음은 FULL OUTER JOIN과 CROSS JOIN이 모두 NULL을 반환하지 않고 동일한 결과 집합을 반환하는 예입니다. FULL OUTER JOIN에 대한 ON 절의 1 = 1에 유의하십시오.
declare @table1 table ( col1 int, col2 int )
declare @table2 table ( col1 int, col2 int )
insert into @table1 select 1, 11 union all select 2, 22
insert into @table2 select 10, 101 union all select 2, 202
select *
from @table1 t1 full outer join @table2 t2
on 1 = 1
(2 행 영향을 받음) (2 행 영향을 받음) col1 col2 col1 col2 ----------- ----------- ----------- ----------- 1 11 10 101 2 22 10101 1 11 2 202 2 22 2 202
select *
from @table1 t1 cross join @table2 t2
col1 col2 col1 col2 ----------- ----------- ----------- ----------- 1 11 10 101 2 22 10101 1 11 2 202 2 22 2 202 (4 행 영향)
SQL 전체 외부 가입
FULL OUTER JOIN은 일치 여부에 관계없이 왼쪽 테이블 (table1)과 오른쪽 테이블 (table2)의 모든 행을 반환합니다.
FULL OUTER JOIN 키워드는 LEFT OUTER JOIN과 RIGHT OUTER JOIN의 결과를 결합합니다.
참조 : http://datasciencemadesimple.com/sql-full-outer-join/
SQL CROSS 가입
SQL CROSS JOIN에서 첫 번째 테이블의 각 행은 두 번째 테이블의 각 행과 매핑됩니다.
CROSS JOIN 연산의 결과 집합으로 생성 된 행 수는 첫 번째 테이블의 행 수에 두 번째 테이블의 행 수를 곱한 값과 같습니다.
CROSS JOIN은 직교 곱 / 직교 조인이라고도합니다.
테이블 A의 행 수는 m이고 테이블 B의 행 수는 n이며 결과 테이블은 m * n 행을 갖습니다.
FROM t1 FULL OUTER JOIN t2 ON t1.id=t2.id
경우 항상FROM t1,t2 WHERE t1.id=t2.id
? 보다 빠릅니다 .