조건이 있는 LEFT JOIN: ON과 WHERE의 차이점은 무엇입니까?
SQL Server에서 LEFT JOIN은 다음을 기반으로 두 테이블의 행을 결합합니다. 지정된 조인 조건. ON 절은 LEFT JOIN 문 내의 조인 조건을 정의하는 반면 WHERE 절은 조인 작업 이후의 행을 필터링합니다. 이러한 미묘한 차이를 제대로 이해하지 못할 경우 예상치 못한 결과가 발생할 수 있습니다.
다음 쿼리를 고려해 보세요.
SELECT t1.f2 FROM t1 LEFT JOIN t2 ON t1.f1 = t2.f1 AND cond2 AND t2.f3 > something
놀랍게도 이 쿼리는 다음과 동일한 결과를 생성하지 않습니다.
SELECT t1.f2 FROM t1 LEFT JOIN t2 ON t1.f1 = t2.f1 AND cond2 WHERE t2.f3 > something
설명
ON 절은 매우 중요한 역할을 합니다. 조인에 참여하는 행을 결정하는 역할. 행이 일치하고 조인 결과에 포함되려면 ON에 지정된 조건이 true여야 합니다. 반면 WHERE 절은 이미 조인된 행을 필터링합니다.
첫 번째 쿼리에서 조건 t2.f3 > ON 절의 일부입니다. 결과적으로 t2.f3이 어떤 값보다 큰 행만 조인에 포함됩니다. 즉, t2.f3이 어떤 것보다 크지 않은 일치하는 행은 결과에서 제외됩니다.
두 번째 쿼리에서 조건 t2.f3 > 뭔가가 WHERE 절의 일부입니다. 이 절은 조인이 수행된 후에 평가됩니다. 따라서 ON 절 조건(t1.f1 = t2.f1 및 cond2)을 충족하는 모든 행은 조인 결과의 일부가 됩니다. 그런 다음 WHERE 절은 이러한 행을 필터링하여 t2.f3이 어떤 항목보다 큰 행만 유지합니다.
예
이 개념을 설명하려면 후보 테이블( 후보자) 및 투표 테이블(투표). 투표를 받은 후보자를 찾으려면 LEFT JOIN을 사용할 수 있습니다.
SELECT * FROM candidates c LEFT JOIN votes v ON c.name = v.voted_for
이 쿼리는 투표를 받지 못한 후보자도 포함하여 모든 후보자를 반환합니다. 조건을 WHERE 절로 옮기면:
SELECT * FROM candidates c LEFT JOIN votes v ON c.name = v.voted_for WHERE v.voted_for IS NOT NULL
이제 결과에는 최소 한 표를 받은 후보자만 포함됩니다.
결론
LEFT JOIN에서 ON 절과 WHERE 절의 차이점을 이해하는 것은 데이터를 효과적으로 조작하는 데 중요합니다. 해당 절에 조건을 주의 깊게 배치하면 쿼리가 원하는 결과를 반환하도록 할 수 있습니다.
위 내용은 SQL의 LEFT JOIN: 'ON' 절과 'WHERE' 절의 주요 차이점은 무엇인가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!