복잡한 SQL 쿼리는 자주 다른 조인 유형을 결합하여 여러 가지 결합 작업을 종종 사용합니다. 주요 고려 사항은 외부 결합의 특성 인 Null 값을 포함시키는 방법이 내부 결합이 이후에 적용될 때 어떻게 영향을 받는지입니다.
내부 결합이 외부 결합 결과에 영향을 줄 수있는 방법
내부 결합은 본질적으로 결합 조건이 테이블 모두에서 충족되는 행 만 반환합니다. 내부 조인이 외부 조인을 따르고 내부 조인 조건이 널 (OUTER JOIN로 인해)이 널이 될 수있는 열에 의존하면 열이 널이면 효과적으로 필터링됩니다. 이것은 외부 결합이 처음 제공 한 널 값의 포함을 무효화합니다.
예시 예
시나리오를 검토합시다 :선택하다 * 사람에게서 person.address_id = address.id의 왼쪽 가입 주소 Inner on Person.email_id = email.id;
의 내부 가입 이메일
내부 조인SELECT *
FROM person
LEFT JOIN address ON person.address_id = address.id
INNER JOIN email ON person.email_id = email.id;
email_id 가 person
email 모두에 존재하는 행으로 만 결과를 제한합니다
이메일 .
person 의 행은
주소 가 있었지만 null
email_id 는 제외됩니다.
문제가있는 시나리오와 해당 솔루션
이 쿼리를 고려하십시오 :
선택하다 *
사람에게서
person.address_id = address.id의 왼쪽 가입 주소
주소에 시내에 가입합니다 .city_id = city.id;
내부 조인 City 와
내부 조인는
address.city_idSELECT *
FROM person
LEFT JOIN address ON person.address_id = address.id
INNER JOIN city ON address.city_id = city.id;
person 행)는 의도하지 않게 최초의 왼쪽 조인의 결과를 변경하지 않습니다
. .
올바른 접근 방식은 내부 조인
: 대신 다른
왼쪽 조인 를 사용하는 것입니다.
선택하다 *
사람에게서
person.address_id = address.id의 왼쪽 가입 주소
주소에 도시에 가입합니다 .city_id = city.id;
이것은 초기 왼쪽 결합
의 포괄 성을 보존하며 address.city_id
가 null 일 수있는 경우를 올바르게 처리합니다. 이렇게하면 주소와 관련된 도시가 있는지 여부에 관계없이 모든
레코드가 포함되도록합니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3