질문 : 왼쪽, 오른쪽, 외부 및 내부 조인의 차이점은 무엇입니까?
이 모든 조인을 차별화하는 방법이 궁금합니다 ...
답변
간단한 예 Students
테이블과 Lockers
테이블이 있다고 가정 해 보겠습니다. SQL에서 조인에 지정하는 첫 번째 테이블 인 Students
는 LEFT 테이블이고 두 번째 테이블 인 Lockers
는 RIGHT 테이블입니다.
각 학생은 로커에 할당 될 수 있으므로 Student
LockerNumber
열이 있습니다. 한 명 이상의 학생이 잠재적으로 단일 사물함에있을 수 있지만, 특히 학년 초에는 사물함이없는 신입생과 배정 된 학생이없는 사물함이있을 수 있습니다.
이 예를 위해 학생 100 명 중 70 명에 사물함이 있다고 가정 해 보겠습니다. 총 50 개의 사물함 이 있으며 그중 40 개에는 학생이 1 명 이상 있고 사물함 10 개에는 학생이 없습니다.
INNER JOIN
은 "모든 학생에게 사물함 표시 "와 동일합니다.
사물함이없는 학생이나 학생이없는 사물함은 사라집니다.
70 행을 반환합니다.
LEFT OUTER JOIN
은 " 모든 학생에게 해당 사물함이있는 경우 해당 사물함 표시 "입니다.
이것은 일반적인 학생 목록이거나 사물함이없는 학생을 식별하는 데 사용될 수 있습니다.
100 개의 행을 반환합니다.
RIGHT OUTER JOIN
은 " 모든 사물함을 보여주고, 거기에 배정 된 학생들은 "입니다.
이것은 할당 된 학생이없는 사물함 또는 너무 많은 학생이있는 사물함을 식별하는 데 사용될 수 있습니다.
80 행을 반환합니다 (40 개의 사물함에있는 70 명의 학생 목록과 학생이없는 10 개의 사물함).
FULL OUTER JOIN
은 어리 석고 아마도 많이 사용하지 않을 것입니다.
" 모든 학생과 모든 사물함을 보여 주시고 가능한 한 일치 시키십시오. "
110 행을 반환합니다 (라커가없는 학생을 포함하여 100 명의 학생 모두. 학생이없는 10 개의 로커 포함).
CROSS JOIN
도이 시나리오에서 상당히 어리 석습니다.
lockernumber
필드를 사용하지 않으므로 기본적으로 실제로 존재하는지 여부에 관계없이 가능한 모든 학생 대 사물함 쌍의 거대한 목록으로 끝납니다.
5000 개의 행을 반환합니다 (학생 100 명 x 사물함 50 개). 새로운 학생들을 빈 사물함과 일치시키는 출발점으로 (필터링과 함께) 유용 할 수 있습니다.
출처 : https://stackoverflow.com/questions/448023/what-is-the-difference-between-left-right-outer-and-inner-joins
'프로그래밍 언어 > Database' 카테고리의 다른 글
각 그룹의 상위 1 개 행 가져 오기 (0) | 2021.09.09 |
---|---|
MySQL에서 특정 열 이름이 있는 모든 테이블을 찾는 방법 (0) | 2021.09.07 |
특정 마이그레이션을 롤백하는 방법 (0) | 2021.07.19 |
MySQL : 데이터베이스에 대한 ** 모든 ** 권한 부여 (0) | 2021.07.16 |
Docker에서 영구 저장소 (예 : 데이터베이스)를 처리하는 방법 (0) | 2021.07.14 |