또한 LEFT JOIN
, RIGHT JOIN
및 FULL JOIN
이 어떻게 적합합니까?
질문자 :Chris de Vries
답변자 : Mark Harrison
매우 일반적인 경우인 중복이 없는 열에 조인한다고 가정합니다.
A와 B의 내부 조인은 A 교차 B의 결과, 즉 벤 다이어그램 교차의 내부 부분을 제공합니다.
A와 B의 외부 결합은 A 결합 B의 결과, 즉 벤 다이어그램 결합의 외부 부분을 제공합니다.
예
각각 단일 열과 다음과 같은 데이터가 있는 두 개의 테이블이 있다고 가정합니다.
AB - - 1 3 2 4 3 5 4 6
(1,2)는 A에 고유하고 (3,4)는 공통이며 (5,6)은 B에 고유합니다.
내부 조인
동등한 쿼리 중 하나를 사용하는 내부 조인은 두 테이블의 교차점, 즉 두 테이블이 공통으로 갖는 두 행을 제공합니다.
select * from a INNER JOIN b on aa = bb; select a.*, b.* from a,b where aa = bb; a | b --+-- 3 | 3 4 | 4
왼쪽 외부 조인
왼쪽 외부 조인은 A의 모든 행과 B의 모든 공통 행을 제공합니다.
select * from a LEFT OUTER JOIN b on aa = bb; select a.*, b.* from a,b where aa = bb(+); a | b --+----- 1 | null 2 | null 3 | 3 4 | 4
오른쪽 외부 조인
오른쪽 외부 조인은 B의 모든 행과 A의 모든 공통 행을 제공합니다.
select * from a RIGHT OUTER JOIN b on aa = bb; select a.*, b.* from a,b where aa(+) = bb; 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 aa = bb; a | b -----+----- 1 | null 2 | null 3 | 3 4 | 4 null | 6 null | 5
답변자 : Martin Smith
벤다이어그램은 저에게 적합하지 않습니다.
예를 들어 교차 조인과 내부 조인 사이에 어떤 차이도 보여주지 않거나 더 일반적으로 서로 다른 유형의 조인 술어 사이에 차이를 보여주거나 작동 방식에 대한 추론을 위한 프레임워크를 제공합니다.
논리적 처리를 이해하는 것을 대체할 수 있는 것은 없으며 어쨌든 이해하기가 비교적 쉽습니다.
- 교차 조인을 상상해보십시오.
-
true
평가되는 행을 유지하면서 1단계의 모든 행에 대해on
절을 평가하십시오. - (외부 조인만 해당) 2단계에서 손실된 외부 행을 다시 추가합니다.
(주의: 실제로 쿼리 최적화 프로그램은 위의 순전히 논리적인 설명보다 쿼리를 실행하는 더 효율적인 방법을 찾을 수 있지만 최종 결과는 동일해야 합니다)
전체 외부 조인 의 애니메이션 버전으로 시작하겠습니다. 추가 설명이 이어집니다.
설명
소스 테이블
먼저 CROSS JOIN
(데카르트 곱이라고도 함)으로 시작합니다. 이것은 ON
절이 없으며 단순히 두 테이블의 모든 행 조합을 반환합니다.
A CROSS JOIN B에서 A.색상, B.색상 선택
내부 및 외부 조인에는 "ON" 절 술어가 있습니다.
- 내부 조인. 교차 조인 결과의 모든 행에 대해 "ON" 절의 조건을 평가합니다. true이면 결합된 행을 반환합니다. 그렇지 않으면 폐기하십시오.
- 왼쪽 외부 조인. 내부 조인과 동일하고 아무 것도 일치하지 않는 왼쪽 테이블의 모든 행에 대해 오른쪽 테이블 열에 대해 NULL 값을 출력합니다.
- 오른쪽 외부 조인. 내부 조인과 동일하고 아무 것도 일치하지 않는 오른쪽 테이블의 모든 행에 대해 왼쪽 테이블 열에 대해 NULL 값을 출력합니다.
- 전체 외부 조인. 내부 조인과 동일하고 왼쪽 외부 조인에서와 같이 일치하지 않는 왼쪽 행을 보존하고 오른쪽 외부 조인에 따라 일치하지 않는 오른쪽 행을 보존합니다.
몇 가지 예
A.Colour = B.Colour의 A INNER JOIN B에서 A.Colour, B.Colour 선택
위는 고전적인 동등 조인입니다.
애니메이션 버전
A.Colour, B.Colour FROM A INNER JOIN B ON A.Colour NOT IN ('Green','Blue')
내부 조인 조건은 반드시 같음 조건일 필요는 없으며 두 테이블 모두(또는 둘 중 하나)의 열을 참조할 필요는 없습니다. 교차 조인의 각 행에서 A.Colour NOT IN ('Green','Blue')
을 평가하면 반환됩니다.
A INNER JOIN B ON 1 =1에서 A.색상, B.색상 선택
조인 조건은 교차 조인 결과의 모든 행에 대해 true로 평가되므로 교차 조인과 동일합니다. 다시는 16행의 그림을 반복하지 않겠습니다.
A.Colour = B.Colour의 왼쪽 외부 조인 B에서 A.Colour, B.Colour 선택
외부 조인은 왼쪽 테이블의 행(왼쪽 조인의 경우)이 오른쪽 테이블의 행과 전혀 조인되지 않는 경우 결과에 NULL
값으로 보존된다는 점을 제외하고 내부 조인과 동일한 방식으로 논리적으로 평가됩니다. 오른쪽 열.
SELECT A.Colour, B.Colour FROM A LEFT OUTER JOIN B ON A.Colour = B.Colour WHERE B.Colour IS NULL
B.Colour IS NULL
행만 반환하도록 이전 결과를 제한합니다. 이 특별한 경우 오른쪽 테이블에 일치하는 항목이 없었기 때문에 보존된 행이 되며 쿼리는 테이블 B
에서 일치하지 않는 단일 빨간색 행을 반환합니다. 이것을 안티 세미 조인이라고 합니다.
nullable이 아니거나 이 패턴이 올바르게 작동하고 발생한 행을 다시 가져오는 것을 방지하기 위해 NULL
IS NULL
테스트를 위한 열을 선택하는 것이 중요합니다. 일치하지 않는 행 외에 해당 열에 대한 NULL
A.Colour = B.Colour의 A 오른쪽 외부 조인 B에서 A.Colour, B.Colour 선택
오른쪽 외부 조인은 오른쪽 테이블에서 일치하지 않는 행을 유지하고 왼쪽 열을 null 확장한다는 점을 제외하고는 왼쪽 외부 조인과 유사하게 작동합니다.
A.Colour = B.Colour의 전체 외부 조인 B에서 A.Colour, B.Colour 선택
완전 외부 조인은 왼쪽 및 오른쪽 조인의 동작을 결합하고 왼쪽 및 오른쪽 테이블 모두에서 일치하지 않는 행을 유지합니다.
SELECT A.Colour, B.Colour FROM A FULL OUTER JOIN B ON 1 = 0
1=0
조건자와 일치하는 행이 없습니다. 양쪽의 모든 행은 다른 쪽 테이블의 열에 NULL이 있는 일반 외부 조인 규칙을 사용하여 보존됩니다.
SELECT COALESCE(A.Colour, B.Colour) AS FROM A FULL OUTER JOIN B ON 1 = 0
앞의 쿼리를 약간 수정하면 두 테이블 UNION ALL
A.Colour = B.Colour WHERE B.Colour = 'Green'의 왼쪽 외부 조인 B에서 A.Colour, B.Colour 선택
WHERE
절(있는 경우)은 조인 후에 논리적으로 실행됩니다. 한 가지 일반적인 오류는 왼쪽 외부 조인을 수행한 다음 일치하지 않는 행을 제외하는 오른쪽 테이블의 조건과 함께 WHERE 절을 포함하는 것입니다. 위의 결과는 외부 조인을 수행합니다 ...
... 그리고 "where" 절이 실행됩니다. NULL= 'Green'
은 true로 평가되지 않으므로 외부 조인에 의해 보존된 행은 결국(파란색 행과 함께) 폐기되어 조인을 내부 조인으로 다시 변환하는 데 효과적입니다.
색상이 녹색인 B의 행만 포함하고 올바른 구문에 관계없이 A의 모든 행을 포함하려는 경우
A.Colour = B.Colour AND B.Colour = 'Green'의 왼쪽 외부 조인 B에서 A.Colour, B.Colour를 선택합니다.
SQL 바이올린
SQLFiddle.com에서 실시간으로 실행되는 이 예제를 참조하세요.
답변자 : ajitksharma
조인 은 두 테이블의 데이터를 결합하는 데 사용되며 결과는 새로운 임시 테이블이 됩니다. 조인은 조인을 수행하기 위해 사용할 조건을 지정하는 술어라는 것을 기반으로 수행됩니다. 내부 조인과 외부 조인의 차이점은 내부 조인은 조인 조건자를 기반으로 실제로 일치하는 행만 반환한다는 것입니다. 예를 들어 Employee 및 Location 테이블을 고려해 보겠습니다.
내부 조인: 내부 조인은 조인 술어를 기반으로 두 테이블( Employee 및 Location )의 열 값을 결합하여 새 결과 테이블을 생성합니다. 쿼리는 Employee의 각 행을 Location의 각 행과 비교하여 결합 술어를 충족하는 모든 행 쌍을 찾습니다. NULL이 아닌 값을 일치시켜 조인 술어를 만족하면 Employee 및 Location 행의 일치하는 각 행 쌍에 대한 열 값이 결과 행으로 결합됩니다. 내부 조인을 위한 SQL은 다음과 같습니다.
select * from employee inner join location on employee.empID = location.empID OR select * from employee, location where employee.empID = location.empID
이제 해당 SQL을 실행한 결과는 다음과 같습니다.
외부 조인:- 외부 조인은 두 개의 조인된 테이블의 각 레코드에 일치하는 레코드가 있을 필요가 없습니다. 조인된 테이블은 일치하는 다른 레코드가 없더라도 각 레코드를 유지합니다. 외부 조인은 유지되는 테이블의 행(왼쪽 또는 오른쪽)에 따라 왼쪽 외부 조인과 오른쪽 외부 조인으로 더 세분화됩니다.
왼쪽 외부 조인:- 테이블 Employee 및 Location 에 대한 왼쪽 외부 조인(또는 단순히 왼쪽 조인)의 결과는 조인 조건이 일치하는 레코드를 찾지 못하는 경우에도 항상 "왼쪽" 테이블( Employee )의 모든 레코드를 포함합니다. "오른쪽" 테이블( Location ). 위의 표를 사용하여 왼쪽 외부 조인에 대한 SQL은 다음과 같습니다.
select * from employee left outer join location on employee.empID = location.empID; //Use of outer keyword is optional
이제 이 SQL을 실행한 결과는 다음과 같습니다.
오른쪽 외부 조인:- 오른쪽 외부 조인(또는 오른쪽 조인)은 테이블 처리가 반대인 경우를 제외하고 왼쪽 외부 조인과 매우 유사합니다. "오른쪽" 테이블( Location )의 모든 행은 조인된 테이블에 한 번 이상 나타납니다. "왼쪽" 테이블( Employee )에 일치하는 행이 없으면 Location 에 일치하는 항목이 없는 레코드에 대해 Employee의 열에 NULL이 나타납니다. SQL은 다음과 같습니다.
select * from employee right outer join location on employee.empID = location.empID; //Use of outer keyword is optional
위의 표를 사용하여 오른쪽 외부 조인의 결과 집합이 어떻게 생겼는지 보여줄 수 있습니다.
완전 외부 조인:- 완전 외부 조인 또는 완전 조인은 조인 결과에 일치하지 않는 행을 포함하여 일치하지 않는 정보를 유지하고 완전 외부 조인을 사용하는 것입니다. 여기에는 다른 테이블에 일치하는 값이 있는지 여부에 관계없이 두 테이블의 모든 행이 포함됩니다.
답변자 : Tushar Gupta - curioustushar
내부 조인
일치하는 행만 검색합니다. 즉, A intersect 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
참고문헌
답변자 : vidyadhar
간단히 말해서:
내부 조인 은 일치하는 행만 검색합니다.
외부 조인 은 한 테이블에서 일치하는 행을 검색하고 다른 테이블의 모든 행을 검색하는 반면 ....결과는 사용 중인 테이블에 따라 다릅니다.
왼쪽 : 오른쪽 테이블의 일치하는 행과 왼쪽 테이블의 모든 행
오른쪽 : 왼쪽 테이블의 일치하는 행과 오른쪽 테이블의 모든 행 또는
전체 : 모든 테이블의 모든 행. 매치가 있건 없건 상관없어
답변자 : 1800 INFORMATION
내부 조인은 조인의 다른 쪽(오른쪽)에 일치하는 레코드가 있는 경우에만 행을 표시합니다.
(왼쪽) 외부 조인은 조인의 다른 쪽(오른쪽)에 일치하는 행이 없더라도 왼쪽에 각 레코드에 대한 행을 표시합니다. 일치하는 행이 없으면 다른(오른쪽) 열에 NULL이 표시됩니다.
답변자 : Brian Boatright
내부 조인을 사용하려면 조인된 테이블에 관련 ID가 있는 레코드가 있어야 합니다.
외부 조인은 오른쪽에 아무 것도 존재하지 않는 경우에도 왼쪽에 대한 레코드를 반환합니다.
예를 들어 Orders 및 OrderDetails 테이블이 있습니다. "OrderID"로 관련되어 있습니다.
명령
- 주문 아이디
- 고객 이름
주문내역
- 주문내역ID
- 주문 아이디
- 상품명
- 수량
- 가격
요청
SELECT Orders.OrderID, Orders.CustomerName FROM Orders INNER JOIN OrderDetails ON Orders.OrderID = OrderDetails.OrderID
OrderDetails 테이블에도 있는 주문만 반환합니다.
OUTER LEFT JOIN으로 변경하면
SELECT Orders.OrderID, Orders.CustomerName FROM Orders LEFT JOIN OrderDetails ON Orders.OrderID = OrderDetails.OrderID
그런 다음 OrderDetails 레코드가 없는 경우에도 Orders 테이블에서 레코드를 반환합니다.
WHERE OrderDetails.OrderID IS NULL
과 같은 where 절을 추가하여 가능한 고아 주문을 나타내는 OrderDetails가 없는 주문을 찾는 데 사용할 수 있습니다.
답변자 : Pratik
간단히 말해서 :
내부 조인 -> 상위 테이블의 기본 키가 하위 테이블의 외래 키와 일치하는 경우 상위 및 하위 테이블에서 공통 레코드만 가져옵니다.
왼쪽 조인 ->
의사 코드
1.Take All records from left Table 2.for(each record in right table,) { if(Records from left & right table matching on primary & foreign key){ use their values as it is as result of join at the right side for 2nd table. } else { put value NULL values in that particular record as result of join at the right side for 2nd table. } }
오른쪽 조인 : 왼쪽 조인의 정반대입니다. 오른쪽 조인의 오른쪽에 있는 LEFT JOIN에 테이블 이름을 입력하면 LEFT JOIN과 동일한 출력을 얻을 수 있습니다.
외부 조인 No matter what
두 테이블의 모든 레코드를 표시합니다. Primary , Forieign key 를 기준 으로 Left 테이블 의 레코드 가 오른쪽 테이블 과 일치 하지 않는 경우 조인 의 결과 로 NULL 값을 사용 합니다 .
예시 :
이제 2개의 테이블에 대해 가정해 보겠습니다.
1.employees , 2.phone_numbers_employees
employees : id , name phone_numbers_employees : id , phone_num , emp_id
여기에, 직원 테이블이 마스터 테이블, phone_numbers_employees은 자식 테이블입니다 (이를 포함 emp_id
이 접속 외래 키로 employee.id
자식 테이블 있도록.)
내부 조인
직원 테이블(해당 id)의 기본 키가 하위 테이블 phone_numbers_employees(emp_id)의 외래 키와 일치하는 경우에만 2개 테이블의 레코드를 가져옵니다.
따라서 쿼리는 다음과 같습니다.
SELECT e.id , e.name , p.phone_num FROM employees AS e INNER JOIN phone_numbers_employees AS p ON e.id = p.emp_id;
여기에서는 위에서 설명한 대로 기본 키 = 외래 키에서 일치하는 행만 가져옵니다. 여기에서 기본 키 = 외래 키에서 일치하지 않는 행은 조인의 결과로 건너뜁니다.
왼쪽 조인 :
왼쪽 조인은 오른쪽 테이블에 일치하는 행이 있는지 여부에 관계없이 왼쪽 테이블의 모든 행을 유지합니다.
SELECT e.id , e.name , p.phone_num FROM employees AS e LEFT JOIN phone_numbers_employees AS p ON e.id = p.emp_id;
외부 조인 :
SELECT e.id , e.name , p.phone_num FROM employees AS e OUTER JOIN phone_numbers_employees AS p ON e.id = p.emp_id;
도식적으로 다음과 같습니다.
답변자 : vijikumar
INNER JOIN
을 사용하여 일치하는 두 테이블의 모든 행을 반환합니다. 즉 결과 테이블에서 모든 행과 열에 값이 있습니다.
OUTER JOIN
에서 결과 테이블에 빈 열이 있을 수 있습니다. 외부 조인은 LEFT
또는 RIGHT
일 수 있습니다.
LEFT OUTER JOIN
은 두 번째 테이블에 일치하는 항목이 없더라도 첫 번째 테이블의 모든 행을 반환합니다.
RIGHT OUTER JOIN
은 첫 번째 테이블에 일치하는 항목이 없더라도 두 번째 테이블의 모든 행을 반환합니다.
답변자 : naga
INNER JOIN
은 두 테이블을 비교할 때 최소한 일치하는 항목이 있어야 합니다. 예를 들어, A ∅ B(A 교차점 B)를 의미하는 표 A와 표 B.
LEFT OUTER JOIN
과 LEFT JOIN
은 동일합니다. 두 테이블에서 일치하는 모든 레코드와 왼쪽 테이블의 모든 가능성을 제공합니다.
마찬가지로 RIGHT OUTER JOIN
과 RIGHT JOIN
은 동일합니다. 두 테이블에서 일치하는 모든 레코드와 올바른 테이블의 모든 가능성을 제공합니다.
FULL JOIN
LEFT OUTER JOIN
과 RIGHT OUTER JOIN
을 중복 없이 조합한 것입니다.
답변자 : shA.t
답은 각각의 의미에 있고 결과에도 있습니다.
메모 :
SQLite
RIGHT OUTER JOIN
또는FULL OUTER JOIN
이 없습니다.
또한MySQL
FULL OUTER JOIN
이 없습니다.
내 대답은 위의 참고를 기반으로합니다.
다음과 같은 두 개의 테이블이 있는 경우:
--[table1] --[table2] id | name id | name ---+------- ---+------- 1 | a1 1 | a2 2 | b1 3 | b2
교차 조인/외부 조인:
당신과 그 테이블의 데이터를 모두 가질 수 있습니다 CROSS JOIN
하거나 함께 ,
다음과 같이 :
SELECT * FROM table1, table2 --[OR] SELECT * FROM table1 CROSS JOIN table2 --[Results:] id | name | id | name ---+------+----+------ 1 | a1 | 1 | a2 1 | a1 | 3 | b2 2 | b1 | 1 | a2 2 | b1 | 3 | b2
내부 조인:
table1.id = table2.id
와 같은 관계를 기반으로 위의 결과에 필터를 추가 INNER JOIN
사용할 수 있습니다.
SELECT * FROM table1, table2 WHERE table1.id = table2.id --[OR] SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.id --[Results:] id | name | id | name ---+------+----+------ 1 | a1 | 1 | a2
왼쪽 [외부] 조인:
위의 결과에서 동일한 관계로 테이블 중 하나의 모든 행을 원할 때 LEFT JOIN
사용할 수 있습니다.
( RIGHT JOIN 의 경우 테이블 위치만 변경)
SELECT * FROM table1, table2 WHERE table1.id = table2.id UNION ALL SELECT *, Null, Null FROM table1 WHERE Not table1.id In (SELECT id FROM table2) --[OR] SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.id --[Results:] id | name | id | name ---+------+------+------ 1 | a1 | 1 | a2 2 | b1 | Null | Null
전체 외부 조인:
결과에 다른 테이블의 모든 행도 포함하려면 FULL OUTER JOIN
사용할 수 있습니다.
SELECT * FROM table1, table2 WHERE table1.id = table2.id UNION ALL SELECT *, Null, Null FROM table1 WHERE Not table1.id In (SELECT id FROM table2) UNION ALL SELECT Null, Null, * FROM table2 WHERE Not table2.id In (SELECT id FROM table1) --[OR] (recommended for SQLite) SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.id UNION ALL SELECT * FROM table2 LEFT JOIN table1 ON table2.id = table1.id WHERE table1.id IS NULL --[OR] SELECT * FROM table1 FULL OUTER JOIN table2 On table1.id = table2.id --[Results:] id | name | id | name -----+------+------+------ 1 | a1 | 1 | a2 2 | b1 | Null | Null Null | Null | 3 | b2
글쎄, 당신의 필요에 따라 당신의 필요에 맞는 각각을 선택하십시오 ;).
답변자 : Kanwar Singh
내부 조인.
조인은 두 테이블의 행을 결합하는 것입니다. 내부 조인 은 쿼리에서 지정한 기준에 따라 두 테이블을 일치시키려고 시도하고 일치하는 행만 반환합니다. 조인의 첫 번째 테이블에 있는 행이 두 번째 테이블에 있는 두 개의 행과 일치하는 경우 결과에 두 개의 행이 반환됩니다. 첫 번째 테이블에 두 번째 행과 일치하지 않는 행이 있으면 반환되지 않습니다. 마찬가지로 두 번째 테이블에 첫 번째 행과 일치하지 않는 행이 있으면 반환되지 않습니다.
외부 조인.
왼쪽 조인 은 첫 번째 테이블의 행을 두 번째 테이블의 행과 일치시키는 항목을 찾으려고 시도합니다. 일치하는 항목을 찾을 수 없으면 첫 번째 테이블의 열을 반환하고 두 번째 테이블의 열을 공백(null)으로 둡니다.
답변자 : Premraj
-
INNER JOIN
두 개 이상의 테이블에 대한 가장 일반적인 조인입니다. 테이블 ON 기본 키와 외래 키 관계 모두에서 일치하는 데이터를 반환합니다. -
OUTER JOIN
INNER JOIN
과 동일하지만 ResultSet에NULL
데이터도 포함합니다.-
LEFT JOIN
=INNER JOIN
+ 왼쪽 테이블의 일치하지 않는 데이터와 오른쪽 테이블의Null
-
RIGHT JOIN
=INNER JOIN
+ 오른쪽 테이블의 일치하지 않는 데이터와 왼쪽 테이블의Null
-
FULL JOIN
=INNER JOIN
Null
일치가 있는 오른쪽 및 왼쪽 테이블 모두에서 일치하지 않는 데이터.
-
- 자체 조인은 테이블이 자체적으로 자체 조인으로 알고 있는 데이터를 참조할 때 SQL에서 키워드가 아닙니다.
INNER JOIN
및OUTER JOIN
사용하여 자체 조인 쿼리를 작성할 수 있습니다.
예를 들어:
SELECT * FROM tablea a INNER JOIN tableb b ON a.primary_key = b.foreign_key INNER JOIN tablec c ON b.primary_key = c.foreign_key
답변자 : Lajos Veres
다른 답변에서 성능 및 최적화 도구에 대한 자세한 내용을 볼 수 없습니다.
INNER JOIN
만이 연관적이라는 사실을 아는 것이 좋습니다. 즉, 최적화 프로그램이 이를 사용할 수 있는 가장 많은 옵션이 있음을 의미합니다. 동일한 결과를 더 빠르게 유지하기 위해 조인 순서를 재정렬할 수 있습니다. 옵티마이저는 대부분의 조인 모드를 사용할 수 있습니다.
일반적으로 다른 종류의 조인 대신 INNER JOIN
을 사용하는 것이 좋습니다. (물론 예상되는 결과 집합을 고려한다면 가능하다.)
이 이상한 연관 동작에 대한 몇 가지 좋은 예와 설명이 있습니다.
답변자 : onedaywhen
많은 사랑을 받은 붉은 음영의 벤다이어그램을 비판했지만, 나는 내 자신의 시도를 게시하는 것이 정당하다고 생각했습니다.
@Martin Smith의 답변이 이 무리 중 최고지만 그의 답변은 각 테이블의 키 열만 표시하는 반면 이상적으로는 키가 아닌 열도 표시되어야 한다고 생각합니다.
허용된 30분 동안 내가 할 수 있는 최선은 여전히 TableB
에 키 값이 없기 때문에 null이 존재하거나 OUTER JOIN
이 실제로 조인이 아니라 통합이라는 것을 적절하게 보여주지 않는다고 생각합니다.
답변자 : S.Serpooshan
INNER JOIN
, LEFT/RIGHT OUTER JOIN
대한 정확한 알고리즘은 다음과 같습니다.
- 첫 번째 테이블에서 각 행을 가지고 :
a
- 옆에 있는 두 번째 테이블의 모든 행을 고려하십시오.
(a, b[i])
- 각 쌍에 대해
ON ...
절을 평가합니다ON( a, b[i] ) = true/false?
- 조건이
true
평가되면 결합된 행(a, b[i])
반환합니다. - 일치하는 항목이 없는 두 번째 테이블의 끝에 도달하고 이것이
Outer Join
이면 다른 테이블의 모든 열에 대해Null
을 사용하여 (가상) 쌍을 반환합니다. LEFT 외부 조인(a, Null)
또는 RIGHT 외부의 경우(Null, b)
가입하다. 이는 첫 번째 테이블의 모든 행이 최종 결과에 존재하는지 확인하기 위한 것입니다.
- 조건이
참고: ON
절에 지정된 조건은 무엇이든 될 수 있으며 기본 키 를 사용할 필요가 없습니다(두 테이블의 열을 항상 참조할 필요도 없습니다)! 예를 들어:
-
... ON T1.title = T2.title AND T1.version < T2.version
( => 이 게시물을 샘플 사용법으로 참조: 열에 최대값이 있는 행만 선택 ) -
... ON T1.y IS NULL
-
... ON 1 = 0
(샘플과 동일)
참고: 왼쪽 조인 = 왼쪽 외부 조인, 오른쪽 조인 = 오른쪽 외부 조인.
답변자 : Akshay Khale
가장 간단한 정의
내부 조인: 두 테이블에서 일치하는 레코드를 반환합니다.
완전 외부 가입 : 두 테이블에서 타의 추종을 불허하는 기록을 위해 널 (null)와 두 테이블에서 반환 일치와 타의 추종을 불허하는 기록을.
왼쪽 외부 조인: 왼쪽의 테이블에서만 일치하는 레코드와 일치하지 않는 레코드를 반환합니다.
Right Outer Join: Right Side 의 테이블에서만 일치하는 레코드와 일치하지 않는 레코드를 반환합니다.
숏컷
일치 + 왼쪽 불일치 + 오른쪽 불일치 = 전체 외부 조인
일치 + 왼쪽 불일치 = 왼쪽 외부 조인
일치 + 오른쪽 불일치 = 오른쪽 외부 조인
일치 = 내부 조인
답변자 : Anands23
간단한 용어로,
1. INNER JOIN OR EQUI JOIN : 두 테이블의 조건만 일치하는 결과 집합을 반환합니다.
2. OUTER JOIN : 조건 일치 여부에 관계없이 두 테이블의 모든 값의 결과 집합을 반환합니다.
3. LEFT JOIN : 왼쪽 테이블의 모든 값의 결과 집합을 반환하고 오른쪽 테이블의 조건과 일치하는 행만 반환합니다.
4. RIGHT JOIN : 오른쪽 테이블의 모든 값의 결과 집합을 반환하고 왼쪽 테이블의 조건과 일치하는 행만 반환합니다.
5. FULL JOIN : Full Join과 Full Outer Join은 같다.
답변자 : Scratte
일반적인 아이디어
FULL OUTER JOIN
, RIGHT OUTER JOIN
및 LEFT OUTER JOIN
사이의 특히 차이점을 포함하여 다양한 조인에 대한 더 나은 설명과 설명을 보려면 Martin Smith 의 답변 을 참조하십시오.
JOIN
표현을 위한 기초를 형성합니다.
크로스 조인
SELECT * FROM citizen CROSS JOIN postalcode
결과는 모든 조합의 데카르트 곱이 됩니다. JOIN
조건이 필요하지 않습니다.
내부 조인
INNER JOIN
JOIN
과 동일합니다.
SELECT * FROM citizen c JOIN postalcode p ON c.postal = p.postal
JOIN
조건을 충족하는 조합이 됩니다.
왼쪽 외부 조인
LEFT OUTER JOIN
LEFT JOIN
과 동일합니다.
SELECT * FROM citizen c LEFT JOIN postalcode p ON c.postal = p.postal
postalcode
번호에 일치하는 항목이 없더라도 결과는 citizen
모든 것입니다. 다시 JOIN
조건이 필요합니다.
재생 데이터
모든 예제는 Oracle 18c에서 실행되었습니다. 테이블 스크린샷의 출처이기도 한 dbfiddle.uk 에서 사용할 수 있습니다.
CREATE TABLE citizen (id NUMBER, name VARCHAR2(20), postal NUMBER, -- <-- could do with a redesign to postalcode.id instead. leader NUMBER); CREATE TABLE postalcode (id NUMBER, postal NUMBER, city VARCHAR2(20), area VARCHAR2(20)); INSERT INTO citizen (id, name, postal, leader) SELECT 1, 'Smith', 2200, null FROM DUAL UNION SELECT 2, 'Green', 31006, 1 FROM DUAL UNION SELECT 3, 'Jensen', 623, 1 FROM DUAL; INSERT INTO postalcode (id, postal, city, area) SELECT 1, 2200, 'BigCity', 'Geancy' FROM DUAL UNION SELECT 2, 31006, 'SmallTown', 'Snizkim' FROM DUAL UNION SELECT 3, 31006, 'Settlement', 'Moon' FROM DUAL -- <-- Uuh-uhh. UNION SELECT 4, 78567390, 'LookoutTowerX89', 'Space' FROM DUAL;
JOIN
및 WHERE
재생할 때 경계가 흐릿함
크로스 조인
CROSS JOIN
결과로 행이 General Idea/ INNER JOIN
.
SELECT * FROM citizen c CROSS JOIN postalcode p WHERE c.postal = p.postal -- < -- The WHERE condition is limiting the resulting rows
CROSS JOIN
을 사용 LEFT OUTER JOIN
의 결과를 얻으려면 NULL
행을 추가하는 것과 같은 트릭이 필요합니다. 생략합니다.
내부 조인
INNER JOIN
은 데카르트 곱이 됩니다. General Idea/ CROSS JOIN
과 동일합니다.
SELECT * FROM citizen c JOIN postalcode p ON 1 = 1 -- < -- The ON condition makes it a CROSS JOIN
이것은 내부 조인이 제거된 조건과 일치하지 않는 결과를 가진 교차 조인으로 실제로 볼 수 있는 곳입니다. 여기서 결과 행은 제거되지 않습니다.
INNER JOIN
을 사용 LEFT OUTER JOIN
의 결과를 얻으려면 트릭이 필요합니다. 생략합니다.
왼쪽 외부 조인
LEFT JOIN
CROSS JOIN
과 같은 행을 생성합니다.
SELECT * FROM citizen c LEFT JOIN postalcode p ON 1 = 1 -- < -- The ON condition makes it a CROSS JOIN
LEFT JOIN
INNER JOIN
과 같은 행을 생성합니다.
SELECT * FROM citizen c LEFT JOIN postalcode p ON c.postal = p.postal WHERE p.postal IS NOT NULL -- < -- removed the row where there's no mathcing result from postalcode
벤다이어그램의 문제점
"sql join cross inner outer"에 대한 이미지 인터넷 검색에는 수많은 벤 다이어그램이 표시됩니다. 제 책상 위에는 인쇄본이 하나 있었습니다. 하지만 대표성에 문제가 있다.
벤다이어그램은 요소가 하나 또는 두 집합에 모두 포함될 수 있는 집합 이론에 적합합니다. 그러나 데이터베이스의 경우 하나의 "세트"에 있는 요소가 테이블의 행인 것처럼 보이기 때문에 다른 테이블에도 존재하지 않습니다. 여러 테이블에 하나의 행이 있는 것은 아닙니다. 행은 테이블에 고유합니다.
자체 조인은 각 요소가 실제로 두 집합에서 동일한 경우입니다. 그러나 여전히 아래의 문제에서 자유롭지 못합니다.
아래에서 설명하는 집합 A
는 왼쪽 집합( citizen
테이블)을 나타내고 집합 B
는 오른쪽 집합( postalcode
테이블)을 나타냅니다.
크로스 조인
두 세트의 모든 요소는 다른 세트의 모든 요소와 일치합니다. 즉, 이 데카르트 곱을 적절하게 나타내려면 B
요소 A
양이 A
B
양이 필요합니다. 집합 이론은 집합의 여러 동일한 요소에 대해 만들어지지 않았으므로 벤 다이어그램이 비실용적/불가능함을 적절하게 표현하는 것으로 나타났습니다. UNION
이 전혀 맞지 않는 것 같습니다.
행이 구별됩니다. UNION
은 총 7행입니다. SQL
결과 세트와 호환되지 않습니다. CROSS JOIN
작동하는 방식이 아닙니다.
다음과 같이 표현하려고 합니다.
..하지만 지금은 INTERSECTION
처럼 보이지만 확실히 그렇지는 않습니다 . INTERSECTION
에는 실제로 두 개의 개별 집합에 있는 요소가 없습니다. 그러나 다음과 유사한 검색 가능한 결과와 매우 유사합니다.
CROSS JOIN
대한 하나의 검색 가능한 결과 는 Tutorialgateway 에서 볼 수 있습니다. INTERSECTION
은 이것과 마찬가지로 비어 있습니다.
내부 조인
요소의 값은 JOIN
조건에 따라 다릅니다. 모든 행이 해당 조건에 대해 고유하게 되는 조건에서 이를 나타낼 수 있습니다. 의미 id=x
는 한 행에 대해서만 참입니다. 테이블 A
( citizen
JOIN
B
( postalcode
)의 여러 행과 일치 CROSS JOIN
과 동일한 문제가 발생합니다. 행은 여러 번 표시되어야 하며 집합 이론은 그렇지 않습니다. 정말로 그것을 위해 만들어졌습니다. 고유성 조건에서는 다이어그램이 작동할 수 있지만 JOIN
조건이 다이어그램에서 요소의 배치를 결정한다는 점을 명심하십시오. 승차를 위해 행의 나머지 부분과 함께 JOIN
조건의 값만 살펴보면 다음과 같습니다.
ON 1 = 1
INNER JOIN
을 CROSS JOIN
으로 만들 때 완전히 분리됩니다.
self- JOIN
을 사용하면 행은 실제로 두 테이블의 동일한 요소이지만 테이블을 A
와 B
로 나타내는 것은 그다지 적합하지 않습니다. 예를 들어 A
요소가 B 의 다른 요소와 일치하도록 만드는 JOIN
ON A.parent = B.child
이며, 별도의 요소 A
에서 B
다음과 같은 SQL
이 될 예에서:
SELECT * FROM citizen c1 JOIN citizen c2 ON c1.id = c2.leader
Smith는 Green과 Jensen의 리더임을 의미합니다.
외부 조인
다시 한 행에 다른 테이블의 행과 일치하는 항목이 여러 개 있을 때 문제가 시작됩니다. OUTER JOIN
이 빈 집합과 일치하는 것으로 생각할 수 있기 때문에 더욱 복잡합니다. 그러나 집합 이론에서 집합 C
와 빈 집합 C
입니다. 빈 집합은 아무것도 추가하지 않습니다. LEFT OUTER JOIN
의 표현 B
의 일치 여부에 관계없이 A
행이 선택되었음을 설명하기 위해 A
를 모두 표시하는 것입니다. 그러나 "일치하는 요소"에는 위의 그림과 동일한 문제가 있습니다. 조건에 따라 다릅니다. 그리고 빈 집합이 A
방황한 것 같습니다.
WHERE 절 - 의미
Smith와 달의 우편 번호를 사용하여 CROSS JOIN
에서 모든 행 찾기:
SELECT * FROM citizen c CROSS JOIN postalcode p WHERE c.name = 'Smith' AND p.area = 'Moon';
JOIN
을 반영하는 데 사용되지 않습니다. WHERE
절 에만 사용됩니다.
..그리고 그것은 의미가 있습니다.
INTERSECT와 UNION이 의미가 있을 때
교차
설명했듯이 INNER JOIN
은 실제로 INTERSECT
가 아닙니다. 그러나 INTERSECT
는 별도의 쿼리 결과에 사용할 수 있습니다. 개별 쿼리의 요소가 실제로 결과 중 하나 또는 둘 다에 속하는 행이기 때문에 여기에서 벤 다이어그램이 의미가 있습니다. Intersect는 분명히 행이 두 쿼리에 모두 있는 경우에만 결과를 반환합니다. 이 SQL
WHERE
위의 행과 동일한 행을 생성하고 벤 다이어그램도 동일합니다.
SELECT * FROM citizen c CROSS JOIN postalcode p WHERE c.name = 'Smith' INTERSECT SELECT * FROM citizen c CROSS JOIN postalcode p WHERE p.area = 'Moon';
노동 조합
OUTER JOIN
UNION
이 아닙니다. 그러나 UNION
INTERSECT
와 동일한 조건에서 작동 SELECT
결합한 모든 결과가 반환됩니다.
SELECT * FROM citizen c CROSS JOIN postalcode p WHERE c.name = 'Smith' UNION SELECT * FROM citizen c CROSS JOIN postalcode p WHERE p.area = 'Moon';
이는 다음과 같습니다.
SELECT * FROM citizen c CROSS JOIN postalcode p WHERE c.name = 'Smith' OR p.area = 'Moon';
..그리고 결과를 제공합니다:
또한 여기에서 벤 다이어그램이 의미가 있습니다.
적용되지 않을 때
중요한 점 은 두 SELECT의 결과 구조가 같을 때만 작동하여 비교 또는 합집합이 가능하다는 것입니다. 이 두 가지의 결과는 다음을 가능하게 하지 않습니다.
SELECT * FROM citizen WHERE name = 'Smith'
SELECT * FROM postalcode WHERE area = 'Moon';
..결과를 UNION
과 결합하려고 하면
ORA-01790: expression must have same datatype as corresponding expression
자세한 내용은 JOIN 및 SQL 조인을 venn 다이어그램으로 설명할 때 Venn Diagrams에 NO라고 말하세요 . EXCEPT
도 다룹니다.
답변자 : philipxy
여기 스택 오버플로를 포함하여 이 주제에 대해 잘못된 정보가 많이 있습니다.
left join on
(일명 left outer join on
)는 null
union all
않는 모든 왼쪽 테이블 행을 합집합한 행에서 inner join on
반환합니다.
right join (on
일명 right outer join on
)은 null
union all
않는 모든 오른쪽 테이블 행을 결합한 행 inner join on
반환합니다.
full join on
(일명 full outer join on
반환) inner join on
행의 union all
확장 타의 추종을 불허하는 왼쪽 테이블 행 null
의 union all
확장 타의 추종을 불허하는 권리 테이블 행 null
들.
(SQL Standard 2006 SQL/Foundation 7.7 구문 규칙 1, 일반 규칙 1 b, 3 c & d, 5 b.)
inner join
이 무엇인지 알 때까지 outer join
하지 마십시오.
반환 시 inner join on
행을 확인하십시오.
SQL의 CROSS JOIN 대 INNER JOIN
이는 또한 Venn(-like) 다이어그램이 내부 및 외부 조인에 도움이 되지 않는 이유를 설명합니다.
Venn(-like) 다이어그램이 조인에 도움이 되지 않는 이유에 대한 자세한 내용:
자연 조인에 대한 벤 다이어그램
답변자 : Sandesh
내부 조인 - 동일한 쿼리 중 하나를 사용 하는 내부 조인 은 두 테이블 의 교차점을 제공합니다. 즉, 두 테이블이 공유하는 두 행입니다.
왼쪽 외부 조인 - 왼쪽 외부 조인 은 A의 모든 행과 B의 모든 공통 행을 제공합니다.
완전 외부 조인 - 완전 외부 조인 은 A와 B의 합집합, 즉 A의 모든 행과 B의 모든 행을 제공합니다. A의 항목에 B의 해당 데이텀이 없으면 B 부분은 null 및 그 반대
답변자 : Laxmi
1. 내부 조인: 조인 이라고도 합니다. 일치하는 경우 에만 왼쪽 테이블과 오른쪽 테이블에 있는 행을 반환합니다. 그렇지 않으면 0개의 레코드를 반환합니다.
예시:
SELECT e1.emp_name, e2.emp_salary FROM emp1 e1 INNER JOIN emp2 e2 ON e1.emp_id = e2.emp_id
2. 완전 외부 조인: 완전 조인이라고도 합니다. 왼쪽 테이블과 오른쪽 테이블에 있는 모든 행을 반환합니다.
예시:
SELECT e1.emp_name, e2.emp_salary FROM emp1 e1 FULL OUTER JOIN emp2 e2 ON e1.emp_id = e2.emp_id
3. 왼쪽 외부 조인: 또는 단순히 왼쪽 조인이라고 합니다. 왼쪽 테이블에 있는 모든 행과 오른쪽 테이블에서 일치하는 행(있는 경우)을 반환합니다.
4. 오른쪽 외부 조인: 오른쪽 조인이라고도 합니다. 왼쪽 테이블(있는 경우)과 오른쪽 테이블에 있는 모든 행에서 일치하는 행을 반환합니다.
조인의 장점
- 더 빠르게 실행합니다.
답변자 : HGG-Dev
조인은 예를 들어 더 쉽게 설명됩니다.
별도의 테이블에 저장된 사람과 이메일을 시뮬레이션하려면,
테이블 A와 테이블 B는 Table_A에 의해 조인됩니다. 아이디 = Table_B. name_id
내부 조인
일치하는 ID의 행만 표시됩니다.
외부 조인
테이블 A 에 대해 일치하는 ID와 일치하지 않는 행이 표시됩니다.
테이블 B 에 대해 일치하는 ID와 일치하지 않는 행이 표시됩니다.
두 테이블에서 일치하는 ID와 일치하지 않는 행이 표시됩니다.
참고: MySQL에서는 전체 외부 조인을 사용할 수 없습니다.
답변자 : Mayank Porwal
아래 2개의 테이블을 고려하십시오.
EMP
empid name dept_id salary 1 Rob 1 100 2 Mark 1 300 3 John 2 100 4 Mary 2 300 5 Bill 3 700 6 Jose 6 400
학과
deptid name 1 IT 2 Accounts 3 Security 4 HR 5 R&D
내부 조인:
대부분 SQL 쿼리에서 JOIN 으로 작성됩니다. 테이블 간에 일치하는 레코드만 반환합니다.
모든 직원과 부서 이름을 찾으십시오.
Select a.empid, a.name, b.name as dept_name FROM emp a JOIN department b ON a.dept_id = b.deptid ; empid name dept_name 1 Rob IT 2 Mark IT 3 John Accounts 4 Mary Accounts 5 Bill Security
위에서 볼 수 있듯이 Jose
는 6
이 Department 테이블에서 일치하는 항목을 찾지 못하므로 출력의 EMP에서 인쇄되지 않습니다. 마찬가지로 HR
및 R&D
행은 Emp 테이블에서 일치하는 항목을 찾지 못했기 때문에 Department 테이블에서 인쇄되지 않습니다.
따라서 INNER JOIN 또는 JOIN은 일치하는 행만 반환합니다.
왼쪽 조인:
이렇게 하면 LEFT 테이블의 모든 레코드와 RIGHT 테이블의 일치하는 레코드만 반환됩니다.
Select a.empid, a.name, b.name as dept_name FROM emp a LEFT JOIN department b ON a.dept_id = b.deptid ; empid name dept_name 1 Rob IT 2 Mark IT 3 John Accounts 4 Mary Accounts 5 Bill Security 6 Jose
따라서 위의 출력을 관찰하면 LEFT 테이블(Emp)의 모든 레코드가 RIGHT 테이블의 일치하는 레코드로 인쇄됩니다.
HR
및 R&D
행은 dept_id의 Emp 테이블에서 일치하는 항목을 찾지 못했기 때문에 Department 테이블에서 인쇄되지 않습니다.
따라서 LEFT JOIN은 왼쪽 테이블의 모든 행을 반환하고 RIGHT 테이블의 일치하는 행만 반환합니다.
여기에서 DEMO를 확인할 수도 있습니다.
답변자 : rashedcs
inner join
과 outer join
의 차이점은 다음과 같습니다.
-
Inner join
은 일치하는 튜플을 기반으로 테이블을 결합하는 조인이고outer join
은 일치하는 튜플과 일치하지 않는 튜플을 기반으로 테이블을 결합하는 조인입니다. -
Inner join
은 일치하지 않는 행이 생략된 두 테이블의 일치하는 행을 병합하는 반면,outer join
은 두 테이블의 행을 병합하고 일치하지 않는 행이 null 값으로 채워집니다. -
Inner join
은 교차 연산과 비슷하지만outer join
은 합집합 연산과 같습니다. -
Inner join
은 두 가지 유형이고outer join
은 세 가지 유형입니다. -
outer join
inner join
보다 빠릅니다.
답변자 : ForguesR
여기에는 매우 정확한 관계 대수학 예제가 포함된 좋은 답변이 많이 있습니다. 다음은 SQL 코딩 딜레마가 있는 아마추어 또는 초보 코더에게 도움이 될 수 있는 매우 간단한 답변입니다.
JOIN
쿼리는 두 가지 경우로 요약되는 경우가 많습니다.
A
데이터의 하위 집합에 대한 SELECT
- 찾고 있는 관련
B
데이터가 데이터베이스 디자인별로 반드시INNER JOIN
사용하십시오. - 데이터베이스 디자인별로 MIGHT 또는 MIGHT NOT 찾고 있는 관련
B
데이터가LEFT JOIN
사용합니다.
답변자 : Nathan Long
데모
설정
psql
들어가서 고양이와 인간의 작은 데이터베이스를 만드십시오. 이 전체 섹션을 복사하여 붙여넣을 수 있습니다.
CREATE DATABASE catdb; \c catdb; \pset null '[NULL]' -- how to display null values CREATE TABLE humans ( name text primary key ); CREATE TABLE cats ( human_name text references humans(name), name text ); INSERT INTO humans (name) VALUES ('Abe'), ('Ann'), ('Ben'), ('Jen'); INSERT INTO cats (human_name, name) VALUES ('Abe', 'Axel'), (NULL, 'Bitty'), ('Jen', 'Jellybean'), ('Jen', 'Juniper');
쿼리
다음은 결과를 보기 위해 [SOMETHING JOIN]
을 다양한 유형으로 변경하여 여러 번 실행할 쿼리입니다.
SELECT humans.name AS human_name, cats.name AS cat_name FROM humans [SOMETHING JOIN] cats ON humans.name = cats.human_name ORDER BY humans.name;
INNER JOIN
은 모든 인간-고양이 쌍을 반환합니다. 고양이가 없는 사람이나 사람이 없는 고양이는 제외됩니다.
human_name | cat_name ------------+----------- Abe | Axel Jen | Jellybean Jen | Juniper
FULL OUTER JOIN
은 모든 사람과 모든 고양이를 반환하며 양쪽에 일치하는 항목이 없으면 NULL
human_name | cat_name ------------+----------- Abe | Axel Ann | [NULL] Ben | [NULL] Jen | Jellybean Jen | Juniper [NULL] | Bitty
LEFT OUTER JOIN
은 모든 사람(왼쪽 테이블)을 반환합니다. 고양이가 없는 사람은 cat_name
열 NULL
사람이 없는 고양이는 제외됩니다.
human_name | cat_name ------------+----------- Abe | Axel Ann | [NULL] Ben | [NULL] Jen | Jellybean Jen | Juniper
A RIGHT OUTER JOIN
은 모든 고양이(오른쪽 테이블)를 반환합니다. 사람이 없는 고양이는 human_name
열 NULL
고양이가 없는 사람은 제외됩니다.
human_name | cat_name ------------+----------- Abe | Axel Jen | Jellybean Jen | Juniper [NULL] | Bitty
내부 대 외부
INNER JOIN
은 일치하는 쌍만 가져오는 반면 OUTER
조인의 각 종류에는 일치하지 않는 일부 항목이 포함됩니다.
그러나 실제 단어 INNER
및 OUTER
는 쿼리에 나타날 필요가 없습니다.
-
JOIN
은 그 자체로INNER
-
LEFT JOIN
,RIGHT JOIN
및OUTER JOIN
OUTER
의미합니다.
출처 : Here
출처 : http:www.stackoverflow.com/questions/38549/what-is-the-difference-between-inner-join-and-outer-join">
'etc. > StackOverFlow' 카테고리의 다른 글
Java에서 InputStream을 어떻게 읽거나 문자열로 변환합니까? (0) | 2021.09.28 |
---|---|
참조 — PHP에서 이 기호는 무엇을 의미합니까? (0) | 2021.09.28 |
GitHub에서 분기된 리포지토리를 업데이트하거나 동기화하려면 어떻게 해야 합니까? (0) | 2021.09.28 |
원격 태그를 삭제하는 방법은 무엇입니까? (0) | 2021.09.28 |
JavaScript에서 문자열의 첫 글자를 어떻게 대문자로 만드나요? (0) | 2021.09.28 |