이 모든 조인을 차별화하는 방법이 궁금합니다 ...
이 모든 조인을 차별화하는 방법이 궁금합니다 ...
답변:
간단한 예 : 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 개의 사물함)을 반환 합니다. 새로운 학생들과 빈 사물함을 일치시키는 출발점으로 유용 할 수 있습니다.
SELECT * FROM students RIGHT OUTER JOIN lockers...
들어와 다른 결과가 나타납니다 SELECT * FROM lockers RIGHT OUTER JOIN students...
. 멋진 대답은,하지만이 완료 업데이트보고 싶어요 SQL
쿼리
세 가지 기본 결합 유형이 있습니다.
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
처음에 조인은 무엇을 이해해야합니까? 여러 테이블을 연결하고 조인 된 테이블에서 특정 결과를 얻습니다. 가장 간단한 방법은 크로스 조인입니다. 입니다.
tableA에 두 개의 열 A와 B가 있고 tableB에 세 개의 열 C와 D가 있다고 가정합니다. 교차 결합을 적용하면 의미없는 행이 많이 생성됩니다. 그런 다음 실제 데이터를 얻으려면 기본 키를 사용하여 일치시켜야합니다.
왼쪽 : 왼쪽 테이블의 모든 레코드와 오른쪽 테이블의 일치하는 레코드를 반환합니다.
오른쪽 : 왼쪽 조인과 반대로 돌아갑니다. 오른쪽 테이블의 모든 레코드와 왼쪽 테이블의 일치하는 레코드를 반환합니다.
내부 : 이것은 교차점과 같습니다. 두 테이블에서 일치하는 레코드 만 반환합니다.
외부 : 그리고 이것은 노동 조합과 같습니다. 두 테이블에서 사용 가능한 모든 레코드를 반환합니다.
때로는 모든 데이터가 필요하지 않으며 일반적인 데이터 나 레코드 만 있으면됩니다. 이러한 조인 방법을 사용하여 쉽게 얻을 수 있습니다. 왼쪽 및 오른쪽 조인은 외부 조인이기도합니다.
교차 조인을 사용하여 모든 레코드를 얻을 수 있습니다. 그러나 수백만 개의 레코드에 관해서는 비용이 많이들 수 있습니다. 따라서 왼쪽, 오른쪽, 내부 또는 외부 조인을 사용하여 간단하게 만드십시오.
감사