SQL Server의 왼쪽 조인 vs. 왼쪽 바깥 조인


1595

차이점은 무엇이며 LEFT JOIN그리고 LEFT OUTER JOIN?


213
없어! OUTER키워드는 선택 사항입니다.
jarlh

9
벤 다이어그램은이 질문에 대한 답변에 적합하지 않습니다. 이 질문에 대한 답변은 None 입니다. 첫 번째 의견을보십시오.
philipxy

3
벤 다이어그램을 도시 출력 행의 차이 에 대한 특별한 경우외부 대 내부 조인 . null 또는 중복 행이 입력되지 않으면 (테이블을 행 값 값 세트로 사용하고 정상적인 수학 평등을 사용할 수 있음) 왼쪽 및 오른쪽 원은 출력 테이블 / 왼쪽 및 오른쪽 조인 세트를 보유합니다 . 그러나 null 또는 중복 행이 입력되면 원이 무엇인지, 그 세트가 Venn 다이어그램이 도움이되지 않는 입력 및 출력 테이블 / 백과 어떻게 관련되는지 설명하기가 너무 어렵습니다. 다른 벤 다이어그램 남용에 대한 의견은 여기를 참조하십시오.
philipxy

답변:


2237

설명서에 따라 FROM (Transact-SQL) :

<join_type> ::= 
    [ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ <join_hint> ] ]
    JOIN

키워드 OUTER는 선택 사항으로 표시됩니다 (대괄호로 묶음). 이 특정한 경우에, 당신이 지정하는지의 여부 OUTER는 차이가 없습니다. 의 다른 요소 절에 가입하면서도 떠나, 옵션으로 표시되어 있습니다 그들을 밖으로 차이를 확인하십시오.

예를 들어, JOIN절의 전체 type-part 는 선택 사항입니다.이 경우 기본값은 INNER단지 지정 하는 경우 JOIN입니다. 다시 말해, 이것은 합법적입니다.

SELECT *
FROM A JOIN B ON A.X = B.Y

동등한 구문 목록은 다음과 같습니다.

A LEFT JOIN B            A LEFT OUTER JOIN B
A RIGHT JOIN B           A RIGHT OUTER JOIN B
A FULL JOIN B            A FULL OUTER JOIN B
A INNER JOIN B           A JOIN B

또한이 다른 SO 질문에 남은 대답을 살펴보십시오 .SQL 왼쪽 조인 대 FROM 행의 여러 테이블? .

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


135
절대적으로 맞습니다. OUTER은 ANSI-92 호환성을 위해 허용됩니다.
Sean Reilly

11
@ LasseV.Karlsen 은 동등한 목록에서 INNER JOIN오른쪽과 JOIN왼쪽에있는 것이 낫지 않습니까?
nawfal

8
@ LasseV.Karlsen 방금 왼쪽에 간결한 형태가 있고 오른쪽에는 확장 된 형태가 있음을 의미했습니다. 나는 당신이 JOINs에 대해 똑같이 따라한다면 일관성이 있다고 생각했습니다 .
nawfal

30
@Outlier 그것은 당신의 특권이지만, 분명히 451 명의 다른 사람들이 대답이 좋다고 생각했습니다. 솔직히 말해서, 하나의 대답이 X라고 말하고 다른 대답이 X를 말하고 문서를 참조하고 문서의 관련 부분을 답변에 복사하면 내 투표가 두 번째 답변으로 넘어 가기 때문에 대답을 그 방법으로 쓴다 나는한다. 누군가가 X가 좋지 않다고 주장 합니다. X 를 증명할 수 있다면 더 좋습니다 (약간의 sactiw의 대답이 아님). 그러나 당신이 원하는 것은 무엇이든 생각하는 특권입니다. 나는 왜 당신이 그것이 무의미하다고 생각하는지에 의문을 제기합니다.
Lasse V. Karlsen

7
@Outlier 그리고 솔직히 말해서, "긴"답변을 읽고 싶지 않다면, 나의 대답은 당신을위한 것이 아닙니다. 여기에 오는 다른 사람들이 똑같은 것에 대해 궁금해하고 왜 그런지, 더 많은 정보를 찾을 수있는 곳 등에 대한 배경 지식을 원합니다. 분명히 당신은이 답변을 원할 사람입니다 : "없음", 그러나 불행히도 이것은 스택 오버플로에 대한 법적 답변이 아니며 그렇게해서는 안됩니다.
Lasse V. Karlsen

700

귀하의 질문에 대답하기 위해 LEFT JOIN과 LEFT OUTER JOIN의 차이점은 없습니다 .

최상위 수준에는 주로 3 가지 유형의 조인이 있습니다.

  1. 안의
  2. 밖의
  3. 가로 질러 가다

  1. INNER JOIN- 두 테이블 모두에있는 경우 데이터를 가져옵니다.

  2. OUTER JOIN3 가지 유형입니다.

    1. LEFT OUTER JOIN -왼쪽 테이블에있는 경우 데이터를 가져옵니다.
    2. RIGHT OUTER JOIN -오른쪽 테이블에 데이터가 있으면 가져옵니다.
    3. FULL OUTER JOIN -두 테이블 중 하나에있는 경우 데이터를 가져옵니다.
  3. 이름에서 알 수 있듯이 CROSS JOIN[n X m]모든 것을 모든 것과 결합시킵니다. 쉼표를 사용하여 분리하기 위해 명령문
    FROM절에 조인 테이블을 간단히 나열하는 시나리오와 유사 SELECT합니다.


주목할 사항 :

  • 방금 언급 JOIN한 경우 기본적으로 a INNER JOIN입니다.
  • OUTER있어야한다 조인 LEFT| RIGHT| FULL당신은 단순히 말할 수 없습니다 OUTER JOIN.
  • OUTER키워드 를 삭제 하고 LEFT JOINor RIGHT JOIN또는 이라고 말하면 FULL JOIN됩니다.

더 나은 방법으로 이들을 시각화하려면 다음 링크로 이동하십시오. SQL 조인에 대한 시각적 설명


17
아주 좋은 대답입니다. "LEFT OUTER JOIN-LEFT OUTER JOIN-왼쪽 표에서 모든 데이터를 미리 설정된 경우 오른쪽에서 일치하는 데이터를 가져옵니다."라고 말하는 것이 더 명확합니다. 2.1 (및 2.2 비슷한 변경)
ssh

1
또한 간단히 'select * from TableA, TableB'를 통해 교차 조인을 수행 할 수 있습니다
om471987

3
내가 괴롭힘을 당하면 미안하지만 ? CROSS JOIN와 동일합니다 FULL JOIN.
TechnicalTophat

9
@RhysO 아니요, CROSS JOIN은 직교 곱입니다. 즉, n 개의 행이있는 테이블이있는 m 개의 행이있는 테이블의 CROSS JOIN은 항상 (n * m) 개의 행을 제공하지만 n 개의 행이있는 테이블의 FULL OUTER JOIN은 m 개의 행이있는 테이블을 사용하면 최대 (n + m) 행으로 줄 것입니다
sactiw

1
@sactiw 사이의 차이에 대한 여러분의 소중한 답변에 특별한 메모를 추가하는 것을 고려 Cross Join하고 Full Outer Join어떤 방법이 비슷한 것 같습니다에 ....
Manuel Jordan

356

왼쪽 조인과 왼쪽 외부 조인의 차이점은 무엇입니까?

아무것도 없습니다 . LEFT JOIN그리고 LEFT OUTER JOIN동등합니다.


13
음 안녕하세요! 누가이 투표를 했습니까? LEFT JOIN은 LEFT OUTER JOIN과 동일합니다.
Mitch Wheat

7
이는 Microsoft SQL Server 및 기타 SQL 호환 RDBMS의 경우입니다.
Bill Karwin

7
OUTER선택 사항 인 이유에 대한 참조 또는 설명을 추가하면 좋을 것 입니다.
Zero3

7
가장 간결하고 정확한 답변은 여기입니다.
나치

4
감사합니다. 허용 된 답변에 너무 많은 정보가있어 혼란 스러웠습니다. 이것이 바로 내가 알아야 할 원래 질문에 대한 답입니다.
베이컨 브래드

66

외부 조인과 외부 조인의 차이를 이해할 수있는 한 PostgreSQL DBA입니다. 차이점은 인터넷 전체에서 상당한 토론을하는 주제입니다. 오늘까지 나는 그 두 가지의 차이점을 보지 못했습니다. 그래서 나는 더 나아가서 그 차이점을 찾으려고 노력합니다. 결국 나는 그것에 관한 전체 문서를 읽었고 이에 대한 답을 찾았습니다.

따라서 문서 (적어도 PostgreSQL에서)를 보면이 문구를 찾을 수 있습니다.

"단어 INNER와는 OUTER. 모든 형태의 선택 사항 INNER, 기본값 LEFT, RIGHTFULL외부 조인을 의미한다."

다시 말해

LEFT JOINLEFT OUTER JOIN같다

RIGHT JOINRIGHT OUTER JOIN같다

나는 그것이 여전히 답을 찾으려고 노력하는 사람들에게 기여할 수 있기를 바랍니다.


60

Left Join그리고 Left Outer Join다른 하나는 있습니다 동일 . 전자는 후자의 속기입니다. Right JoinRight Outer Join관계 에 대해서도 마찬가지 입니다. 데모는 평등을 보여줄 것입니다. 각 쿼리의 실제 예제는 SQL Fiddle을 통해 제공되었습니다 . 이 도구를 사용하면 쿼리를 직접 조작 할 수 있습니다.

주어진

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

왼쪽 결합왼쪽 외부 결합

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

결과

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


오른쪽 조인오른쪽 바깥 조인

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

결과

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


43

다음 순서로 조인을 생각하는 것이 더 쉽다는 것을 알았습니다.

  • CROSS JOIN-두 테이블의 데카르트 곱. 모든 조인은 여기에서 시작합니다
  • 내부 가입-필터가 추가 된 CROSS JOIN.
  • 외부 조인-요소가 누락 된 내부 조인 (왼쪽 또는 오른쪽 테이블에서)이 나중에 추가됩니다.

이 (상대적으로) 간단한 모델을 알아낼 때까지 JOINS는 항상 약간의 검은 예술이었습니다. 이제 그들은 완벽하게 이해됩니다.

이것이 혼란보다 더 도움이되기를 바랍니다.


이것은 질문에 대답하지 않습니다.
philipxy 2016 년

33

LEFT / RIGHT와 LEFT OUTER / RIGHT OUTER가 같은 이유는 무엇입니까? 왜이 어휘를 설명해 봅시다. LEFT 및 RIGHT 조인은 OUTER 조인의 특정 사례이므로 OUTER LEFT / OUTER RIGHT 이외의 다른 것은 될 수 없습니다. OUTER 조인은 OUTER 조인의 부분 결과 인 LEFT 및 RIGHT 조인과 달리 FULL OUTER 라고도 합니다. 과연:

Table A | Table B     Table A | Table B      Table A | Table B      Table A | Table B
   1    |   5            1    |   1             1    |   1             1    |   1
   2    |   1            2    |   2             2    |   2             2    |   2
   3    |   6            3    |  null           3    |  null           -    |   -
   4    |   2            4    |  null           4    |  null           -    |   -
                        null  |   5             -    |   -            null  |   5
                        null  |   6             -    |   -            null  |   6

                      OUTER JOIN (FULL)     LEFT OUTER (partial)   RIGHT OUTER (partial)

INNER, OUTER, CROSS의 3 가지 사례 만 존재하는 것은 물론 이러한 작업에 별칭이있는 이유가 명확 해졌습니다. OUTER를위한 2 개의 서브 케이스. 교사가 이것을 설명하는 방법과 어휘, 위의 답변은 종종 다양한 유형의 참여가있는 것처럼 보입니다. 그러나 실제로는 매우 간단합니다.


1
"3 가지 사례 만 존재한다는 것은 명백하다": 흥미롭지 만 결함이있다. 내부 조인은 특수한 교차 조인 (즉, 이동 조인 술어를 where 절로 간주)임을 고려하십시오. 또한 외부 조인은 조인이 아니라 '결측'열 대신 널이 사용되는 공용체입니다. 따라서 크로스 만이 필요한 조인이라고 주장 할 수 있습니다. 관계 이론의 현재 생각은 자연적인 결합이 모든 결합 요구 사항을 충족한다는 것입니다. 따로 : 어휘 "가 JOIN암시하는 INNER JOIN"이 외부 조인 어휘 에 대한 추론과 일치 하는지 설명 할 수 있습니까?
언젠가

27

질문에 대답하기 위해

SQL Server 조인 구문에서 OUTER 은 선택 사항입니다.

msdn 기사에 언급되어 있습니다 : https://msdn.microsoft.com/en-us/library/ms177634(v=sql.130).aspx

따라서 다음 목록은 OUTER 유무에 관계없이 동등한 구문을 보여줍니다.

LEFT OUTER JOIN => LEFT JOIN
RIGHT OUTER JOIN => RIGHT JOIN
FULL OUTER JOIN => FULL JOIN

다른 동등한 구문

INNER JOIN => JOIN
CROSS JOIN => ,

Dotnet Mob Artice를 적극 추천 : SQL Server에 참여 여기에 이미지 설명을 입력하십시오


2
여기 벤 다이어그램을 남용하면 질문에 대한 내 의견을 볼 수 있습니다.
philipxy

20

조인이 3 개뿐입니다.

  • A) 교차 결합 = 직교 (예 : 표 A, 표 B)
  • B) 내부 조인 = JOIN (예 : 테이블 A 조인 / 내부 조인 테이블 B)
  • C) 외부 조인 :

       There are three type of outer join
       1)  Left Outer Join     = Left Join
       2)  Right Outer Join    = Right Join
       3)  Full Outer Join     = Full Join    

도움이 되길 바랍니다.


1
따라서 5 명은 모두 합류합니다.
Zeek2

19

JOIN에는 주로 세 가지 유형이 있습니다

  1. 내부 : 두 테이블 모두에있는 데이터를 가져옵니다.
    • 가입 만이 내부 가입을 의미합니다
  2. 외부 : 세 가지 유형

    • LEFT OUTER--왼쪽 테이블 및 일치 조건에만있는 데이터를 가져옵니다.
    • RIGHT OUTER-오른쪽 테이블 및 일치 조건에만있는 데이터를 가져옵니다.
    • FULL OUTER--테이블 중 하나 또는 둘 모두에 존재하는 데이터를 가져옵니다.
    • (왼쪽 또는 오른쪽 또는 전체) "OUTER"을 쓰지 않고 OUTER JOIN을 쓸 수 있습니다.
  3. 크로스 조인 : 모든 것을 모든 것에 조인


16

구문 설탕은 일반 독자에게 조인이 내면이 아니라는 것을 더 분명하게 만듭니다.


2
그렇다면 ... 전체 외부 가입은 무엇입니까?
Amy B

5
tableA FULL OUTER JOIN tableB는 tableB에 일치하는 레코드가없는 tableA의 모든 레코드, tableA에 일치하는 레코드가없는 tableB의 모든 레코드 및 tableB에 일치하는 레코드가있는 tableA의 모든 레코드의 세 가지 유형의 레코드를 제공합니다.
Dave DuPlantis가

4

이 질문의 맥락에서 2 개의 'APPLY'연산자를 게시하고 싶습니다.

가입 :

  1. 내부 가입 = 가입

  2. 외부 가입

    • 왼쪽 외부 가입 = 왼쪽 가입

    • 오른쪽 외부 가입 = 오른쪽 가입

    • 완전 외부 가입 = 완전 가입

  3. 크로스 가입

SELF-JOIN : 이것은 별도의 조인 유형이 아닙니다. 이것은 기본적으로 위의 조인 중 하나를 사용하여 테이블을 조인하는 것입니다. 그러나 SQL Developer 커뮤니티에서 많은 사람들 이이 용어를들을 수 있기 때문에 JOIN 토론에서 언급 할 가치가 있다고 느꼈습니다.

적용 :

  1. CROSS APPLY -INNER JOIN과 유사하지만 (왼쪽 테이블의 각 행에 대해 오른쪽 테이블에서 무언가를 계산할 수 있다는 장점이 추가되었으며 일치하는 행만 리턴 함)
  2. OUTER APPLY -LEFT OUTER JOIN과 유사하지만 왼쪽 테이블의 각 행에 대해 오른쪽 테이블에서 무언가를 계산할 수 있다는 장점이 추가되었으며 오른쪽 테이블의 일치 여부에 관계없이 왼쪽 테이블의 모든 행을 반환합니다.

https://www.mssqltips.com/sqlservertip/1958/sql-server-cross-apply-and-outer-apply/

https://sqlhints.com/2016/10/23/outer-apply-in-sql-server/

실제 예, SQL에서 OUTER / CROSS APPLY를 사용하는 경우

APPLY 연산자는 하위 쿼리에서 동일한 계산을 수행하는 것보다 더 나은 성능을 제공하므로 매우 유용합니다. 또한 이전 버전의 SQL Server에서 많은 분석 기능을 대체합니다. 그래서 JOINS에 익숙해지면 한 SQL 개발자가 다음에 APPLY 연산자를 배우려고 노력해야한다고 생각합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.