> 데이터 베이스 > MySQL 튜토리얼 > 왼쪽 조인과 내부 조인: WHERE 절이 왼쪽 조인 결과에 어떤 영향을 미칩니까?

왼쪽 조인과 내부 조인: WHERE 절이 왼쪽 조인 결과에 어떤 영향을 미칩니까?

DDD
풀어 주다: 2025-01-03 18:53:44
원래의
1079명이 탐색했습니다.

Left Join vs. Inner Join: How Does a WHERE Clause Affect a Left Join's Results?

왼쪽 조인과 내부 조인

SQL에서 왼쪽 조인과 내부 조인은 서로 다른 결과 집합을 생성하는 두 가지 기본 조인 유형입니다. 왼쪽 조인은 왼쪽 테이블의 모든 행을 반환하고 조인 조건에 따라 오른쪽 테이블의 행을 일치시킵니다. 일치하는 항목이 없으면 오른쪽 테이블의 누락된 값은 NULL로 표시됩니다. 반면, 내부 조인은 조인 조건을 충족하는 행만 반환하고 해당 조건을 충족하지 않는 두 테이블의 행은 제외합니다.

왼쪽 조인 동작 수정

In 제공된 SQL 쿼리:

SELECT
a.foo
b.bar
c.foobar
FROM tableOne AS a
INNER JOIN tableTwo AS b ON a.pk = b.fk
LEFT JOIN tableThree AS c ON b.pk = c.fk
WHERE a.foo = 'something'
AND c.foobar = 'somethingelse'
로그인 후 복사

WHERE c.foobar = 'somethingelse' 절의 존재 LEFT JOIN 조건 이후에는 놀라운 효과가 있습니다. Left 조인을 내부 조인으로 변환하는 것으로 보이며, tableThree에 'somethingelse'가 없으면 행이 반환되지 않습니다.

설명

이상해 보이는 이 동작은 SQL 문의 평가 순서에 따라 발생합니다. WHERE 절은 조인이 수행된 후에 처리됩니다. 따라서 c.foobar = 'somethingelse'가 WHERE 절에 지정되면 c.foobar가 NULL인 왼쪽 조인에서 모든 행을 효과적으로 필터링합니다. 결과적으로 c.foobar가 지정된 값('somethingelse')과 일치하는 행만 최종 결과 세트에 유지됩니다.

해결책

원하는 값을 유지하려면 왼쪽 조인 동작에는 두 가지 옵션이 있습니다.

  1. WHERE 절을 다음으로 수정합니다. include OR c.foobar IS NULL, 아래와 같이:

    WHERE a.foo = 'something'
    AND (c.foobar = 'somethingelse' OR c.foobar IS NULL)
    로그인 후 복사

    이렇게 하면 c.foobar가 NULL인 행이 결과 세트에 포함될 수 있습니다.

  2. c.foobar = 'somethingelse' 비교를 왼쪽 조인의 ON 절로 이동하여 해당 조건을 만족하는 행만 결과에 포함되도록 합니다. 세트:

    LEFT JOIN tableThree AS c ON b.pk = c.fk AND c.foobar = 'somethingelse'
    로그인 후 복사

위 내용은 왼쪽 조인과 내부 조인: WHERE 절이 왼쪽 조인 결과에 어떤 영향을 미칩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿