JOIN과 INNER JOIN의 차이점


998

이 두 조인 모두 나에게 동일한 결과를 줄 것입니다.

SELECT * FROM table JOIN otherTable ON table.ID = otherTable.FK

vs

SELECT * FROM table INNER JOIN otherTable ON table.ID = otherTable.FK

성과 또는 그 밖의 진술 사이에 차이점이 있습니까?

서로 다른가요? SQL 구현 있습니까?



6
참고로 : CROSS JOIN은 조인 유형을 아는 것이 좋습니다 (INNER JOIN과는 다릅니다).
Serge

답변:


1092

그것들은 기능적으로 동일하지만 INNER JOIN특히 쿼리에 다른 조인 유형 ( LEFT또는 RIGHT또는 또는 CROSS)이 포함되어있는 경우 읽기가 더 명확 할 수 있습니다 .


11
모든 데이터베이스 (예 : SQL, postgres)에 해당 되는가? 이것을 설명하는 문서에 대한 링크를 아는 사람이 있습니까?
Chogg


14
JOIN을 작성하는 것만으로도 쿼리가 명확하고 INNER는 노이즈입니다.
Ivanzinho

22
어쩌면 나는 순수 주의자이지만 SQL을 작성할 때 암시 적보다 명시 적으로하는 것이 낫다고 생각합니다. INNER JOIN은 특히 복잡한 쿼리에서 더 읽기 쉽습니다.
bruceskyaus

3
@Ivanzinho : 키보드 스트로크는 쿼리 나 프로그램 복잡성의 척도가 아닙니다. 실제 복잡성은 가독성이 중요한 역할을하는 유지 보수성에서 비롯됩니다. INNER JOIN이라고 말할 때, 당신은 그것이 무엇을하고 있는지를 확신 할 수 있지만, 일반 JOIN은 당신이나 다른 누군가를 떠나 표준이 구현에 대해 말하고 INNER라는 것을 궁금해 할 것입니다. / OUTER / LEFT가 우연히 또는 의도적으로 제외되었습니다.
Tuukka Haapaniemi

243

아니, 순수한 구문 설탕 차이가 없습니다 .


22
나는 이것을 구문 설탕이라고 부르지 않을 것이다. "기본"조인 유형, "속기"또는 "별칭"일 수 있습니다.
mk12

62
컴퓨터 과학에서, 구문 설탕은 물건을보다 쉽게 ​​읽거나 표현할 수 있도록 설계된 프로그래밍 언어 내의 구문 입니다. 나는 생략하는 능력 INNER이이 정의에 해당 한다고 믿는다 .
Quassnoi 2016 년

14
정의를 문자 그대로 적용하면 예, 그러나 대체 정의 이름뿐만 아니라 더 흥미로운 구문 유형을 위해 항상 예약 된 것을 보았습니다.
mk12

10
이 질문은 질문된다는 단순한 사실을 @Quassnoi, 쇼의 누락됩니다는 INNER않습니다 되지 읽기 쿼리가 쉽게합니다. 내가 아는 한, 여기에 대한 답변으로 해결되지 않았다면 JOIN의미 LEFT JOIN가 있습니다.
martennis 2016 년

2
@Quassnoi 귀하의 의견에 인용 된 소개 위키 문은 구문 설탕에 해당하지만 정의로는 부적절합니다. 구문 설탕은 복잡한 구문의 특수한 경우에 대한 간단한 구문에 관한 것입니다. INNER가 "노이즈 단어"라고 말하는 것이 더 적절합니다.
philipxy

143

내부 가입 = 가입

지정하지 않으면 INNER JOIN이 기본값입니다. 이라는 단어를 사용할 때 유형을 입니다.

LEFT OUTER JOIN 또는 RIGHT OUTER JOIN을 사용할 수도 있습니다.이 경우 OUTER라는 단어는 선택 사항이거나 CROSS JOIN을 지정할 수 있습니다.

또는

내부 조인의 구문은 다음과 같습니다.

고르다 ...
TableA에서
[INNER] 조인

즉, "INNER"키워드는 선택 사항입니다 . 결과는 키워드의 유무에 관계없이 동일합니다.



54

와 마찬가지로 OUTER JOINs단어 "OUTER"는 선택 사항입니다. 그것은의 LEFT또는 RIGHT차종 키워드 JOIN"OUTER" JOIN.

그러나 어떤 이유로 나는 항상 사용 "OUTER"과 같이 LEFT OUTER JOIN결코 LEFT JOIN,하지만 난 절대 사용하지 INNER JOIN않고, 난 그냥 사용합니다 "JOIN":

SELECT ColA, ColB, ...
FROM MyTable AS T1
     JOIN MyOtherTable AS T2
         ON T2.ID = T1.ID
     LEFT OUTER JOIN MyOptionalTable AS T3
         ON T3.ID = T1.ID

23
나는 당신의 반대입니다. 나는 항상 "INNER JOIN"이라고 말하지만 결코 OUTER를 사용하지 않습니다. "LEFT JOIN"과 "RIGHT JOIN"입니다. 캐릭터 수를 일정하게 유지하고 있다고 생각합니다!
Stephen Holt

10
@Jonathan. 내부 조인에 대한 방향 개념이 없습니다. 외부 조인은 일치하지 않는 결과 집합을 생성 할 수 있으며 방향에 따라 달라질 수 있습니다. 내부는 방향이 중요하지 않도록 일치가 필요합니다.
Karl Kieninger

32

다른 답변에서 이미 언급했듯이 귀하의 예에는 차이가 없습니다.

관련 문법이 여기문서화되어 있습니다.

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

모두 선택 사항임을 보여줍니다. 이 페이지는 또한

INNER일치하는 모든 행 쌍이 리턴되도록 지정합니다. 두 테이블에서 일치하지 않는 행을 버립니다.조인 유형을 지정하지 않으면 이것이 기본값 입니다.

문법은 또한 INNER 되어 있지만이 필요합니다. 조인 힌트를 지정할 때.

아래 예를 참조하십시오

CREATE TABLE T1(X INT);
CREATE TABLE T2(Y INT);

SELECT *
FROM   T1
       LOOP JOIN T2
         ON X = Y;

SELECT *
FROM   T1
       INNER LOOP JOIN T2
         ON X = Y;

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

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