>데이터 베이스 >MySQL 튜토리얼 >WHERE 절은 SQL에서 LEFT JOIN의 동작에 어떤 영향을 줍니까?

WHERE 절은 SQL에서 LEFT JOIN의 동작에 어떤 영향을 줍니까?

Barbara Streisand
Barbara Streisand원래의
2025-01-03 20:58:43703검색

How Does a WHERE Clause Affect a LEFT JOIN's Behavior in SQL?

WHERE 절에서 왼쪽 조인의 동작

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'

이 쿼리에서 tableTwo와 tableThree 사이의 왼쪽 조인은 다음으로 인해 내부 조인으로 효과적으로 변환됩니다. WHERE 절의 조건, c.foobar = 'somethingelse'. 이는 WHERE 절에 왼쪽 조인(여기서는 'somethingelse') 오른쪽에 NULL이 아닌 값을 지정하면 해당 열이 NULL인 행이 모두 제거되어 내부 조인 동작이 발생하기 때문입니다.

따라서 쿼리는 c.foobar에 대해 NULL이 아닌 값을 갖는 tableThree의 일치하는 행이 있는 tableOne 및 tableTwo의 행만 반환합니다. 원하는 Left 조인 동작을 유지하려면 다음 해결 방법을 고려하십시오.

1. WHERE 절에 NULL 포함:

c.foobar = 'somethingelse' 조건을 AND(c.foobar = 'somethingelse' OR c.foobar IS NULL)로 대체하여 foobar가 ' 다른 것' 또는 NULL.

2. Join 조건자로 조건 이동:

c.foobar = 'somethingelse' 조건을 WHERE 절에서 Join 조건자로 이동합니다.

LEFT JOIN tableThree AS c ON b.pk = c.fk AND c.foobar = 'somethingelse'

이렇게 하면 쿼리는 다음을 유지합니다. c.foobar 값을 기준으로 행을 필터링하는 동안 왼쪽 조인 동작.

위 내용은 WHERE 절은 SQL에서 LEFT JOIN의 동작에 어떤 영향을 줍니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.