이 모든 조인을 차별화하는 방법이 궁금합니다 …
답변
간단한 예 : Students
테이블과 테이블 이 있다고 가정 Lockers
합니다. SQL에서 조인에 지정하는 첫 번째 테이블 Students
은 LEFT 테이블이고 두 번째 테이블 Lockers
은 RIGHT 테이블입니다.
각 학생은 사물함에 배정 될 수 있으므로 테이블에 LockerNumber
열이 Student
있습니다. 둘 이상의 학생이 잠재적으로 단일 사물함에있을 수 있지만 특히 학년도가 시작될 때 사물함이없는 신입생과 학생이 배정되지 않은 사물함이있을 수 있습니다.
이 예제를 위해 100 명의 학생이 있고 그 중 70 명 에 사물함이 있다고 가정 해 봅시다. 총 50 개의 사물함 이 있으며 그 중 40 명에는 최소 1 명의 학생이 있고 10 명의 사물함에는 학생이 없습니다.
INNER JOIN 은 ” 사물함이있는 모든 학생을 보여줘 “와 같습니다 .
사물함이없는 학생 또는 학생이없는 사물함이 없습니다.
70 행을 반환
LEFT OUTER JOIN 은 ” 모든 학생에게 해당 사물함이있는 경우 해당 사물함과 함께 표시 “입니다.
일반 학생 목록이거나 사물함이없는 학생을 식별하는 데 사용될 수 있습니다.
100 행을 반환
RIGHT OUTER JOIN 은 ” 모든 사물함을 보여주고 학생들에게 할당 된 사물함 이 있다면” 보여줍니다 .
이는 학생이 배정되지 않은 사물함 또는 너무 많은 학생이있는 사물함을 식별하는 데 사용될 수 있습니다.
80 개의 행을 반환합니다 (40 개의 사물함에있는 70 명의 학생과 학생이없는 10 명의 사물함)
전체 외부 가입 은 어리 석고 아마도 많이 사용하지 않을 것입니다.
” 모든 학생과 모든 사물함을 보여주고 당신이 할 수있는 곳과 일치 시키세요 ”
110 개의 줄을 돌려줍니다
이 시나리오에서는 CROSS JOIN 도 상당히 어리 석습니다. 학생 테이블에서
연결된 lockernumber
필드를 사용하지 않으므로 기본적으로 실제로 존재하는지 여부에 관계없이 가능한 모든 학생 대 사물함 쌍의 거대한 목록으로 끝납니다.
5000 행 (100 명의 학생 x 50 개의 사물함)을 반환 합니다. 새로운 학생들과 빈 사물함을 일치시키는 출발점으로 유용 할 수 있습니다.
답변
세 가지 기본 결합 유형이 있습니다.
INNER
join은 두 테이블을 비교하고 일치하는 결과 만 반환합니다. 첫 번째 테이블의 레코드는 두 번째의 여러 결과와 일치 할 때 복제됩니다. INNER 조인은 결과 집합을 더 작게 만드는 경향이 있지만 레코드를 복제 할 수 있기 때문에 이것이 보장되지는 않습니다.CROSS
join은 두 테이블을 비교하고 두 테이블에서 가능한 모든 행 조합을 리턴합니다. 이러한 종류의 조인으로 인해 의미가 없을 수도있는 많은 결과를 얻을 수 있으므로주의해서 사용하십시오.OUTER
조인은 두 테이블을 비교하고 일치하는 항목이 있으면 데이터를 반환하고 그렇지 않으면 NULL 값을 반환합니다. INNER 조인과 마찬가지로 다른 테이블의 여러 레코드와 일치 할 때 한 테이블의 행을 복제합니다. OUTER 조인은 결과 집합이 자체적으로 집합에서 레코드를 제거하지 않기 때문에 결과 집합을 더 크게 만드는 경향이 있습니다. 또한 NULL 값을 추가 할시기와 위치를 판별하려면 OUTER 결합을 규정해야합니다.LEFT
의미 무엇이든 상관없이 첫 번째 테이블의 모든 레코드를 유지하고 두 번째 테이블이 일치하지 않을 때 NULL 값을 삽입합니다.RIGHT
반대의 의미 : 무슨 일이 있어도 두 번째 테이블의 모든 레코드를 유지하고 첫 번째 테이블이 일치하지 않으면 NULL 값을 삽입FULL
즉, 두 테이블의 모든 레코드를 유지하고 일치하지 않으면 두 테이블에 NULL 값을 삽입합니다.
OUTER
구문에서 키워드가 생략되는 경우 가 종종 있습니다 . 대신 “LEFT JOIN”, “RIGHT JOIN”또는 “FULL JOIN”이됩니다. INNER 및 CROSS 조인은 LEFT, RIGHT 또는 FULL과 관련하여 의미가 없으므로 외부 조인을 명확하게 나타내기에 충분합니다.
다음은 각 유형을 사용하려는 경우의 예입니다.
INNER
: “송장”테이블의 모든 레코드와 해당 “InvoiceLines”를 반환하려고합니다. 이것은 모든 유효한 송장에 최소한 한 줄이 있다고 가정합니다.OUTER
: 특정 송장에 대한 모든 “InvoiceLines”레코드와 해당 “InventoryItem”레코드를 반환하려고합니다. 이것은 모든 InvoiceLine이 IventoryItem을 갖지 않도록 서비스를 판매하는 비즈니스입니다.CROSS
: 10 개의 행이있는 숫자 표가 있으며 각 값은 ‘0’- ‘9’입니다. 결합 할 날짜 범위 테이블을 작성하여 범위 내에서 매일 하나의 레코드로 끝나도록합니다. 이 테이블을 반복적으로 결합하여 필요한만큼 연속 정수를 만들 수 있습니다 (10에서 1의 거듭 제곱에서 시작하면 각 조인은 지수에 1을 더함). 그런 다음 DATEADD () 함수를 사용하여 해당 값을 범위의 기본 날짜에 추가하십시오.
답변
4 가지 종류 만 있습니다 :
- 내부 조인 : 가장 일반적인 유형입니다. 결합 조건과 일치하는 모든 입력 행 쌍에 대해 출력 행이 생성됩니다.
- 왼쪽 외부 조인 : 오른쪽에 테이블에 일치하는 행이 발견 될 수있는 임의의 행이 있다면 내부와 동일한 것을 제외 조인하는 행과 왼쪽 테이블의 값을 포함하는 출력이며,
NULL
각각은 오른쪽 표의 값. 즉, 왼쪽 테이블의 모든 행이 출력에 한 번 이상 나타납니다. - 오른쪽 외부 조인 : 테이블의 역할이 바뀐 점을 제외하고 왼쪽 외부 조인과 동일합니다.
- 완전 외부 조인 : 왼쪽 및 오른쪽 외부 조인의 조합. 두 테이블의 모든 행이 출력에 한 번 이상 나타납니다.
“교차 조인”또는 “카테 시안 조인”은 조인 조건이 지정되지 않은 모든 내부 쌍을 출력하는 내부 조인입니다.
FULL 조인을 지적 해 주신 RusselH에게 감사드립니다.
답변
SQL JOINS 차이점 :
기억하기 매우 간단합니다.
INNER JOIN
두 테이블에 공통 인 레코드 만 표시합니다.
OUTER JOIN
두 테이블의 모든 내용이 일치하는지 여부에 따라 병합됩니다.
LEFT JOIN
로 동일합니다 LEFT OUTER JOIN
– (. 바로 테이블 레코드와 일치하는 첫 번째 (가장 왼쪽) 테이블에서 레코드를 선택)
RIGHT JOIN
RIGHT OUTER JOIN
-(왼쪽 테이블 레코드와 일치하는 두 번째 (가장 오른쪽) 테이블에서 레코드 선택 )와 동일 합니다.
답변
Wikipedia 에서 Join (SQL) 확인
- 내부 조인-두 개의 테이블이 주어지면 내부 조인은 두 테이블에 존재하는 모든 행을 리턴합니다.
-
왼쪽 / 오른쪽 (외부) 조인-주어진 두 테이블은 조인의 왼쪽 또는 오른쪽 테이블에 존재하는 모든 행을 반환하며, 조인 절이 일치하면 다른 쪽의 행이 반환되거나에 대한 null이 반환됩니다. 그 열
-
전체 외부-두 테이블이 주어지면 모든 행을 반환하고 왼쪽 또는 오른쪽 열이 없으면 null을 반환합니다.
-
교차 조인-직교 조인이므로주의해서 사용하지 않으면 위험 할 수 있습니다
답변
더 잘 보이게하면 도움이 될 수 있습니다. 한 가지 예 :
1 번 테이블:
ID_STUDENT STUDENT_NAME
1 Raony
2 Diogo
3 Eduardo
4 Luiz
표 2 :
ID_STUDENT 로커
3 l1
4 l2
5 l3
내가 할 때 얻는 것 :
-Inner join of Table 1 and Table 2:
- Inner join returns both tables merged only when the key
(ID_STUDENT) exists in both tables
ID_STUDENT STUDENT_NAME LOCKER
3 Eduardo l1
4 Luiz l2
-Left join of Table 1 and Table 2:
- Left join merges both tables with all records form table 1, in
other words, there might be non-populated fields from table 2
ID_ESTUDANTE NOME_ESTUDANTE LOCKER
1 Raony -
2 Diogo -
3 Eduardo l1
4 Luiz l2
-Right join of table 1 and table 2:
- Right join merges both tables with all records from table 2, in
other words, there might be non-populated fields from table 1
ID_STUDENT STUDENT_NAME LOCKER
3 Eduardo l1
4 Luiz l2
5 - l3
-Outter join of table 1 and table 2:
- Returns all records from both tables, in other words, there
might be non-populated fields either from table 1 or 2.
ID_STUDENT STUDENT_NAME LOCKER
1 Raony -
2 Diogo -
3 Eduardo l1
4 Luiz l2
5 - l3
답변
LEFT JOIN
그리고 RIGHT JOIN
유형입니다 OUTER JOIN
.
INNER JOIN
기본값입니다. 두 테이블의 행이 결합 조건과 일치해야합니다.