1
조
불다
1
1
스타 워즈
2
계집애
암사슴
2
2
쥬라기 공원
3
괴롭히다
까마귀
2
2
쥬라기 공원
4
제프리
눈
0
널
널
문제를 볼 수 있습니까? 이것은 왼쪽 결합으로, 고객 테이블의 모든 데이터가 책과의 중첩에 관계없이 포함되어 있음을 의미합니다. Jeffrey Snow가 포함되어 있지만 대출에 관한 책이 없습니다. 이것이 "ID1"및 "Title"열이 NULL로 설정된 이유입니다. 테이블이 결합되면 그에게 링크 된 책 제목이나 책 ID가 없습니다.
우리가“”를 포함하여 모든 고객을 보여 주면 Jeffrey가 대출에 관한 책이 있든 상관없이 고객이기 때문에 위의 데이터를 원할 것입니다. 이 경우 왼쪽 결합의 기능입니다. <span>SELECT *
</span><span>FROM customers
</span><span>LEFT JOIN books
</span><span>ON customers.book_id = books.id
</span>
로그인 후 복사
우리가“에 책이없는 고객을 보여주십시오”라는 질문을한다면 이제 무엇을 찾아야하는지 완벽하게 이해됩니다. 우리는 Books.Id 열에 null을 볼 수있는 고객 만 선택하면됩니다 (가입시,“ID”라는 두 개의 열이 있으므로 ID1이 표시됩니다). Books.id가 Null 인 위치를 추가하면 표준 Where 절로이 작업을 수행합니다. 이제 결과는 다음과 같이 필터링됩니다
id
FirstName
마지막 이름
book_id
id1
제목
4
제프리
눈
0
널
널
당신은 이제 대출에 책이없는 모든 고객이 있습니다.
제외와 함께 가입
올바른 조인으로 똑같이 해 보겠습니다. 누구에게도 빌려주지 않은 모든 책을 찾아 봅시다.
|
일반 권리 조인은 대출 여부에 관계없이 모든 책을 반환 할 수 있습니다. 결과 세트는 다음과 같습니다.
id
FirstName
마지막 이름
book_id
id1
제목
|
1
조
불다
1
1
스타 워즈
2
계집애
암사슴
2
2
쥬라기 공원
3
괴롭히다
까마귀
2
2
쥬라기 공원
널
널
널
널
3
작은 여자
널
널
널
널
4
톰 소여
이것은 조금 다르게 보입니다. 먼저, Jurassic Park가 두 번 나열되어 있음을 알 수 있습니다. 두 사람이 대출에 관한 책을 가지고 있고 데이터베이스가 각 경기마다 행을 반환하기 때문입니다.
고객 테이블의 모든 열은 작은 여성과 Tom Sawyer에게는 무효가되어 해당 타이틀을 빌리지 않았으므로 겹치는 데이터가 없기 때문에 .
대출되지 않은 모든 책을 선택하려면 Where Clause를 사용하여 Customers.id 열에서 "널"을 찾습니다.
|
결과를 예측할 수 있어야합니다. 우리는 대출되지 않은 책만 얻습니다.
id
FirstName
마지막 이름
book_id |
id1
제목
널
널
널
널
3
작은 여자
널
널
널
널
4
톰 소여
외부는 제외와 함께 입니다
마지막 조인은 다음과 같습니다.
|
이 조향은 그다지 유용하지 않지만, 대출이없는 고객 목록과 동시에 대출되지 않은 책을 제공합니다.
| .
이와 같은 이상한 결합은 문자 그대로 테이블 사이에 연결없이 데이터를 선택 해야하는 경우 유용 할 수 있습니다. 아마도 당신은 고아 데이터를 사냥하거나 변환 한 일부 오래된 데이터베이스에서 불일치를 찾고있을 것입니다. .
사실, 이런 종류의 조인은 너무 이상해서 MySQL에서도 할 수 없으므로 외부 조인을 지원하지 않습니다. 일반 SQL은 쿼리가 다음과 같습니다 (mysql이 아닌 MSSQL) :
|
이 쿼리의 결과는 다음과 같은 것을보고 데이터를 반환합니다.
id
FirstName
마지막 이름
book_id
id1
제목
1
제프리
눈
0
널
널
널
널
널
널
3
작은 여자
널
널
널
널
4
톰 소여
Craig Buckler가 노조와 설명한 방법을 사용하여 외부 조인을 달성 할 수는 있지만 잠재적 인 문제는 없습니다. MySQL에서 전체 외부 조인을 시뮬레이션하기위한 최고의 Google 결과는 2006 년부터 여기에서 찾을 수 있습니다. 다소 복잡해질 수 있습니다.
위의 코드에서 알아야 할 주요 사항은 두 테이블에서 제외하기를 원하기 때문에 조인의 양쪽에서 NULL을 확인하는 것입니다. 양쪽을 확인하지 않고, 우리는 단순히 방금 이야기 한 다른 합류 중 하나로 끝납니다.
이와 같은 쿼리가 얼마나 기괴하거나 지원되었는지에 관계없이, 나는 그것을 사용해야 할 이유를 생각할 수 있다면 유효한 유형의 조인이기 때문에 그것을 포함시키고 싶었습니다. 기타 생각