> 데이터 베이스 > MySQL 튜토리얼 > SQL의 LEFT JOIN: 'ON' 절과 'WHERE' 절의 주요 차이점은 무엇인가요?

SQL의 LEFT JOIN: 'ON' 절과 'WHERE' 절의 주요 차이점은 무엇인가요?

Barbara Streisand
풀어 주다: 2025-01-03 00:18:40
원래의
631명이 탐색했습니다.

LEFT JOIN in SQL:  What's the Key Difference Between `ON` and `WHERE` Clauses?

조건이 있는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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