"내부 조인"과 "외부 가입"의 차이점은 무엇입니까?
질문
또한 어떻게 남았습니까?
답변
매우 일반적인 경우가 아닌 열에 가정하는 것이라고 가정합니다.
A와 B의 내부 조인은 교차 B, 즉 Venn 다이어그램 교차로의 내부 부분을 제공합니다. A와 B의 외부 가입은 노동 조합 B, 즉 Venn 다이어그램 유니온의 외부 부분을 제공합니다.
예
두 개의 테이블이있는 경우, 각 열이있는 두 개의 테이블과 다음과 같이 데이터가 있습니다.
A B
- -
1 3
2 4
3 5
4 6
(1,2)는 a, (3,4)에 고유하고 있으며 (5,6)은 B에 유일합니다.
내부 조인
동등한 쿼리 중 하나를 사용하는 내부 조인은 두 테이블의 교차점, 즉 공통점이있는 두 행을 제공합니다.
select * from a INNER JOIN b on a.a = b.b;
select a.*, b.* from a,b where a.a = b.b;
a | b
--+--
3 | 3
4 | 4
왼쪽 외부 조인
왼쪽 외부 가입은 모든 행과 B의 공통 행을 제공합니다.
select * from a LEFT OUTER JOIN b on a.a = b.b;
select a.*, b.* from a,b where a.a = b.b(+);
a | b
--+-----
1 | null
2 | null
3 | 3
4 | 4
오른쪽 외부 조인
오른쪽 외부 가입은 B에 모든 행을 제공합니다.
select * from a RIGHT OUTER JOIN b on a.a = b.b;
select a.*, b.* from a,b where a.a(+) = b.b;
a | b
-----+----
3 | 3
4 | 4
null | 5
null | 6
전체 외부 조인
완전한 외부 조인은 A와 B의 노합, 즉 A와 모든 행의 모든 행을 B로 제공합니다. A에 해당 데이텀이 B에없는 경우 B 부분이 NULL이며 부는도 마찬가지이다.
select * from a FULL OUTER JOIN b on a.a = b.b;
a | b
-----+-----
1 | null
2 | null
3 | 3
4 | 4
null | 6
null | 5
답변
벤 다이어그램은 나를 위해 실제로 그것을하지 않습니다.
예를 들어, 교차 조인과 내부 조인 사이의 구별이 표시되지 않으며 일반적으로 여러 유형의 조인 술어 사이의 구별을 보여 주거나 자신이 어떻게 작동하는지 추론하기위한 틀을 제공합니다.
논리적 처리를 이해하는 대용품은 없으며 어쨌든 파악하기가 상대적으로 간단합니다.
- Imagine a cross join.
- Evaluate the
on
clause against all rows from step 1 keeping those where the predicate evaluates totrue
- (For outer joins only) add back in any outer rows that were lost in step 2.
(NB : 실제로 쿼리 최적화기는 위의 순수한 논리적 설명보다 쿼리를 실행하는보다 효율적인 방법을 찾을 수 있지만 최종 결과는 동일해야합니다.)
나는 완전한 외부 조인의 애니메이션 버전으로 시작하겠습니다.추가 설명은 다음과 같습니다.

설명
소스 테이블

십자가 가입 (일명 데카르트 제품)으로 처음 시작하십시오.여기에는 ON 절이 없으며 두 테이블의 행의 모든 조합을 단순히 반환합니다.
크로스 가입 B에서 A.Colour, B.Colour를 선택하십시오

내부 및 외부 조인에는 "On"조건부가 있습니다.
내부 조인.교차 조인 결과의 모든 행에 대한 "On"절에서 조건을 평가하십시오.true에 가입 된 행을 반환하면.그렇지 않으면 그것을 버리십시오. 왼쪽 외부 조인.왼쪽 테이블의 모든 행에있는 모든 행에 대해서는 오른쪽 테이블 열에 대한 null 값과 일치하지 않는 모든 행에 대해서도 동일합니다. 오른쪽 외부 가입.왼쪽 테이블 열에 NULL 값으로 나눌 값과 일치하지 않는 오른쪽 테이블의 모든 행에 대해 내부 조인과 동일합니다. 전체 외부 조인.내부 조인과 동일 다음 왼쪽 외부 조인과 오른쪽 비 매칭 행과 같이 오른쪽 외부 조인과 같이 일치하는 행을 유지합니다.
몇 가지 예제
a.colour = b.Colour의 내부 조인 b에서 A.Colour, B.Colour를 선택하십시오.
위의 내용은 고전적인 Equi Join입니다.

애니메이션 버전

A.Colour, B. Colour에서 A. Colour, B. Colour에서 A.Colour ( 'Green', 'Blue')
내부 조인 조건은 반드시 평등 상태 일 필요는 없으며 테이블의 양 (또는 심지어 중 하나)에서 열을 참조 할 필요는 없습니다.Cross Join의 각 행에서 A.Colour 아닌 ( '녹색', '파란색')을 평가합니다.

A. Colour, B. Colour를 선택하십시오. 내부 조인 b에서 1 = 1
조인 조건은 크로스 조인 결과의 모든 행에 대해 true로 평가됩니다. 그래서 이것은 교차 조인과 같습니다.나는 16 행의 그림을 다시 반복하지 않을 것이다.
A.Colour = B. Colour에서 왼쪽 외부 가입 B에서 A.Colour, B.Colour를 선택하십시오.
외부 조인은 왼쪽 테이블의 행 (왼쪽 조인 용)의 행이 모든 행에서 모든 행과 조인하지 않는 경우에 대한 내부 조인과 동일한 방식으로 논리적으로 평가됩니다.오른손 열.

A.Colour = B. Colour에서 왼쪽 외부 가입 B에서 A.Colour, B. Colour에서 선택하십시오. b.colour가 null입니다.
이것은 이전 결과를 제한하여 b.colour가 null 인 행을 반환합니다.이 특별한 경우는 오른손 테이블에서 일치하지 않고 보존 된 행이 될 것이고 쿼리는 표 B에서 일치하지 않는 단일 빨간색 행을 반환합니다.
Null이 아닌 Null 테스트의 열을 선택하는 것이 중요하거나 조인 조건 이이 패턴이 올바르게 작동하려면이 패턴이 올바르게 작동하려면이 패턴이 제외되도록하는 것이 보장되도록합니다.유엔 일치 행 이외에 해당 열에 대한 널값.

a.colour = b.Colour에서 오른쪽 외부 가입 B에서 A.Colour, B.Colour를 선택하십시오.
오른쪽 외부 조인은 오른쪽 테이블에서 일치하는 행을 보존하는 것을 제외하고 왼쪽 외부 조인과 마찬가지로 작동하고 왼쪽 열을 확장합니다.

a.colour = b.Colour에서 전체 외부 가입 B에서 A.Colour, B.Colour를 선택하십시오.
전체 외부 조인 왼쪽 및 오른쪽의 동작과 왼쪽 및 오른쪽 테이블에서 일치하는 행을 보존합니다.

전체 외부 가입 B에서 A.Colour, B. Colour를 선택하십시오. 1 = 0
교차 조인에 행이 없습니다. 1 = 0 술어와 일치합니다.양쪽의 모든 행은 정상적인 외부 조인 규칙을 사용하여 보존되어 다른쪽에있는 테이블의 열에 null이 보존됩니다.

전체 외부 조인 B에서 색상으로 합계 (A.Colour, B. Colour)를 선택하십시오. 1 = 0
이전 쿼리에 대한 사소한 수정을 통해 두 테이블 모두의 노조를 시뮬레이션 할 수 있습니다.

A.Colour = B. Colour에서 왼쪽 외부 가입 B에서 A.Colour, B.Colour를 선택하십시오. 여기서 b.colour = 'green'
가입 후에 WHERE 절 (있는 경우)은 논리적으로 실행됩니다.하나의 공통 오류는 왼쪽 외부 조인을 수행 한 다음 비 일치하는 행을 제외한 오른쪽 테이블에 조건이있는 WHERE 절을 포함하는 것입니다.위의 내용은 외부 조인을 수행합니다 ...

... 그리고 그런 다음 "where"절이 실행됩니다.NULL = 'GREEN'은 사실로 평가되지 않으므로 외부 조인에 의해 보존 된 행은 폐기 된 행 (파란색 하나와 함께)을 끝납니다.

색상이 녹색이고 모든 행이 올바른 구문이 있는지에있는 B에서 행만 포함하는 의도가있는 경우
A.Colour = B. Colour 및 B.Colour = 'Green'on A. Colour, B. Colour를 선택하십시오.

SQL Fiddle.
Sqlfiddle.com에서 Live를 실행하는이 예제를 참조하십시오.
답변
합류는 결과가 새 임시 테이블이되어 두 개의 테이블의 데이터를 결합하는 데 사용됩니다.조인은 조인을 수행하기 위해 사용할 조건을 지정하는 술어라고하는 무언가를 기반으로 수행됩니다.내부 조인과 외부 조인의 차이점은 내부 조인이 조인 술어를 기반으로 실제로 일치하는 행만 반환 할 것입니다. 예를 들어 직원과 위치 테이블을 고려해 보겠습니다.
직원
EmpID | EmpName |
---|---|
13 | Jason |
8 | Alex |
3 | Ram |
17 | Babu |
25 | Johnson |
위치
EmpID | EmpLoc |
---|---|
13 | San Jose |
8 | Los Angeles |
3 | Pune, India |
17 | Chennai, India |
39 | Bangalore, India |
내부 가입 : - 내부 조인은 조인 - 술어에 따라 두 테이블 (직원 및 위치)의 열 값을 결합하여 새 결과 테이블을 만듭니다.쿼리는 직원의 각 행을 각 위치 행과 비교하여 조인 - 술어를 만족하는 모든 쌍을 찾습니다.가입 - 술어가 null이 아닌 값과 일치함으로써 만족되면 일치하는 각 쌍의 직원 및 위치의 열 값이 결과 행으로 결합됩니다. 내부 조인의 SQL의 SQL은 다음과 같습니다.
select * from employee inner join location on employee.empID = location.empID
OR
select * from employee, location where employee.empID = location.empID
이제 SQL을 실행 한 결과는 다음과 같습니다.
Employee.EmpId | Employee.EmpName | Location.EmpId | Location.EmpLoc |
---|---|---|---|
13 | Jason | 13 | San Jose |
8 | Alex | 8 | Los Angeles |
3 | Ram | 3 | Pune, India |
17 | Babu | 17 | Chennai, India |
외부 가입 : - 외부 조인은 두 개의 가입 된 테이블에 각 레코드가 일치하는 레코드를 갖도록 요구하지 않습니다.조인 된 테이블은 다른 일치하는 레코드가 없더라도 각 레코드를 유지합니다.외부 조인은 테이블의 행이 유지되는 테이블의 행 (왼쪽 또는 오른쪽)에 따라 왼쪽 외부 조인 및 오른쪽 외부 조인으로 추가로 하세벨합니다.
왼쪽 외부 가입 : - 테이블 직원 및 위치에 대한 왼쪽 외부 조인 (또는 단순히 가입을 간단하게 왼쪽으로 왼쪽으로 왼쪽으로 왼쪽으로 왼쪽으로 왼쪽)의 결과는 "왼쪽"테이블 (직원)의 모든 레코드가 포함되어 있습니다. 조인 조건이 "오른쪽"테이블에 일치하는 레코드가 일치하지 않는 경우에도(위치). 다음은 위의 테이블을 사용하여 왼쪽 외부 조인의 SQL이 보일 것입니다.
select * from employee left outer join location on employee.empID = location.empID;
//Use of outer keyword is optional
이제이 SQL을 실행 한 결과는 다음과 같습니다.
Employee.EmpId | Employee.EmpName | Location.EmpId | Location.EmpLoc |
---|---|---|---|
13 | Jason | 13 | San Jose |
8 | Alex | 8 | Los Angeles |
3 | Ram | 3 | Pune, India |
17 | Babu | 17 | Chennai, India |
25 | Johnson | NULL | NULL |
참고 Johnson은 직원 위치 테이블에 항목이 없지만 여전히 결과에 포함되어 있지만 위치 필드가 무효화됩니다.
오른쪽 외부 가입 : - 오른쪽 외부 조인 (또는 오른쪽 가입)은 테이블의 치료를 제외하고는 왼쪽 외부 조인과 매우 유사합니다."오른쪽"테이블 (위치)의 모든 행은 적어도 한 번에 가입 된 테이블에 나타납니다."왼쪽"테이블 (직원)이 존재하는 일치 행이 없으면 NULL은 위치와 일치하지 않는 레코드의 직원의 열에 null이 나타납니다. 이것은 SQL이 어떻게 생겼는지입니다.
select * from employee right outer join location on employee.empID = location.empID;
//Use of outer keyword is optional
위의 테이블을 사용하여 오른쪽 외부 가입의 결과 집합이 어떻게 생겼는지 보여줄 수 있습니다.
Employee.EmpId | Employee.EmpName | Location.EmpId | Location.EmpLoc |
---|---|---|---|
13 | Jason | 13 | San Jose |
8 | Alex | 8 | Los Angeles |
3 | Ram | 3 | Pune, India |
17 | Babu | 17 | Chennai, India |
NULL | NULL | 39 | Bangalore, India |
방갈로르에서 일하는 직원이없는 직원이 없지만 직원 필드가 널 뽑힌 결과에 여전히 결과에 포함되어 있습니다.
전체 외부 조인 : - 전체 외부 조인 또는 전체 조인은 조인 결과에 비 매칭 행을 포함하여 비 매칭 정보를 유지하는 것입니다. 전체 외부 조인을 사용하십시오.여기에는 다른 테이블이 일치하는 값이 있는지 여부에 관계없이 두 테이블의 모든 행이 모두 포함됩니다.
Employee.EmpId | Employee.EmpName | Location.EmpId | Location.EmpLoc |
---|---|---|---|
13 | Jason | 13 | San Jose |
8 | Alex | 8 | Los Angeles |
3 | Ram | 3 | Pune, India |
17 | Babu | 17 | Chennai, India |
25 | Johnson | NULL | NULL |
NULL | NULL | 39 | Bangalore, India |
MySQL 8.0 참조 설명서 - 조인 구문
Oracle Join 작업
답변
내부 조인
일치하는 행만 검색, 즉 교차 B.

SELECT *
FROM dbo.Students S
INNER JOIN dbo.Advisors A
ON S.Advisor_ID = A.Advisor_ID
왼쪽 외부 조인
첫 번째 테이블에서 모든 레코드를 선택하고 두 번째 레코드를 선택하십시오. 가입 된 키와 일치하는 테이블.

SELECT *
FROM dbo.Students S
LEFT JOIN dbo.Advisors A
ON S.Advisor_ID = A.Advisor_ID
전체 외부 조인
두 번째 테이블에서 모든 레코드와 첫 번째 레코드를 선택하십시오. 가입 된 키와 일치하는 테이블.

SELECT *
FROM dbo.Students S
FULL JOIN dbo.Advisors A
ON S.Advisor_ID = A.Advisor_ID
참조
내부 및 외부 조인 SQL 예제 및 조인 블록 SQL : 조인
답변
간단한 단어로 :
내부 조인은 일치하는 행만 검색합니다.
외부 조인은 한 테이블에서 일치하는 행을 검색하고 다른 테이블의 모든 행을 검색합니다 .... 결과는 사용중인 사용자가 사용중인 것에 따라 다릅니다.
왼쪽 : 오른쪽 테이블의 일치하는 행과 왼쪽 테이블의 모든 행 오른쪽 : 왼쪽 테이블의 일치 행과 오른쪽 테이블의 모든 행 또는 FULL : 모든 테이블의 모든 행.일치가 있거나 아닌 경우 상관 없습니다.
답변
내부 조인은 조인의 다른 (오른쪽) 측면에 일치하는 레코드가있는 경우에만 행을 표시합니다.
A (왼쪽) 외부 조인은 조인의 다른 (오른쪽) 측면에 일치하는 행이 없더라도 왼쪽의 각 레코드에 대한 행을 표시합니다.일치하는 행이 없으면 다른 (오른쪽) 측의 열이 널을 표시합니다.
출처:https://stackoverflow.com/questions/38549/what-is-the-difference-between-inner-join-and-outer-join
최근댓글