[sql] 왼쪽, 오른쪽, 외부 및 내부 조인의 차이점은 무엇입니까?

이 모든 조인을 차별화하는 방법이 궁금합니다 …



답변

간단한 예 : Students테이블과 테이블 이 있다고 가정 Lockers합니다. SQL에서 조인에 지정하는 첫 번째 테이블 StudentsLEFT 테이블이고 두 ​​번째 테이블 LockersRIGHT 테이블입니다.

각 학생은 사물함에 배정 될 수 있으므로 테이블에 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 개의 사물함)을 반환 합니다. 새로운 학생들과 빈 사물함을 일치시키는 출발점으로 유용 할 수 있습니다.


답변

세 가지 기본 결합 유형이 있습니다.

  • INNERjoin은 두 테이블을 비교하고 일치하는 결과 만 반환합니다. 첫 번째 테이블의 레코드는 두 번째의 여러 결과와 일치 할 때 복제됩니다. INNER 조인은 결과 집합을 더 작게 만드는 경향이 있지만 레코드를 복제 할 수 있기 때문에 이것이 보장되지는 않습니다.
  • CROSSjoin은 두 테이블을 비교하고 두 테이블에서 가능한 모든 행 조합을 리턴합니다. 이러한 종류의 조인으로 인해 의미가 없을 수도있는 많은 결과를 얻을 수 있으므로주의해서 사용하십시오.
  • 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 가지 종류 만 있습니다 :

  1. 내부 조인 : 가장 일반적인 유형입니다. 결합 조건과 일치하는 모든 입력 행 쌍에 대해 출력 행이 생성됩니다.
  2. 왼쪽 외부 조인 : 오른쪽에 테이블에 일치하는 행이 발견 될 수있는 임의의 행이 있다면 내부와 동일한 것을 제외 조인하는 행과 왼쪽 테이블의 값을 포함하는 출력이며, NULL각각은 오른쪽 표의 값. 즉, 왼쪽 테이블의 모든 행이 출력에 한 번 이상 나타납니다.
  3. 오른쪽 외부 조인 : 테이블의 역할이 바뀐 점을 제외하고 왼쪽 외부 조인과 동일합니다.
  4. 완전 외부 조인 : 왼쪽 및 오른쪽 외부 조인의 조합. 두 테이블의 모든 행이 출력에 한 번 이상 나타납니다.

“교차 조인”또는 “카테 시안 조인”은 조인 조건이 지정되지 않은 모든 내부 쌍을 출력하는 내부 조인입니다.

FULL 조인을 지적 해 주신 RusselH에게 감사드립니다.


답변

SQL JOINS 차이점 :

기억하기 매우 간단합니다.

INNER JOIN 두 테이블에 공통 인 레코드 만 표시합니다.

OUTER JOIN 두 테이블의 모든 내용이 일치하는지 여부에 따라 병합됩니다.

LEFT JOIN로 동일합니다 LEFT OUTER JOIN– (. 바로 테이블 레코드와 일치하는 첫 번째 (가장 왼쪽) 테이블에서 레코드를 선택)

RIGHT JOINRIGHT 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 기본값입니다. 두 테이블의 행이 결합 조건과 일치해야합니다.