2013-05-10 6 views
1

아래 두 쿼리에서 JOIN 동작의 차이점을 알고 싶습니다.두 쿼리 간의 SQL Server 차이점

의 예를 들어 가정 해 봅시다 나는 쿼리

SELECT * 
FROM table1 t1 
     LEFT JOIN table2 t2 
       ON t1.column1 = t2.column2 
       AND t2.something = 'this thing' 
WHERE some other conditions 


SELECT * 
FROM table1 t1 
     LEFT JOIN table2 t2 
       ON t1.column1 = t2.column2 
WHERE some other conditions AND t2.something = 'this thing' 

나는 문제의 where 절에 문을 조인에서 조건을 제거하여 만들려고 어떤 차이 영화화하는 데 문제를 가지고있다. 일치 t2 기록이 없을 수 t2.something = 'this thing'가 T1에 가입됩니다 t2에서 첫 번째 쿼리에서

+3

둘째는 INNER JOIN과 비슷한 결과를 제공합니다. 첫 번째 함수는 조인이 발생할 때't2.something' 필터를 적용합니다. – Taryn

+0

시스템에 따라 다르게 동작 할 수 있습니다. 귀하의 질문이 SQL Server, Oracle, MySql, PostGRE 등의 태그를 포함하도록 질문을 편집하십시오. 그렇지 않으면이 주석을 무시하십시오. – Renan

답변

1

만 기록하지만 어떤 t1 레코드가 포함됩니다.

두 번째 쿼리에서 t2의 ALL 레코드는 t1에 조인되지만 t2.something = 'this thing'이 최종 결과에 포함됩니다. WHERE 절에 조건 t2.something = 'this thing' 추가

효과적으로 (NULL이 될 것입니다 경우 t2.something에서부터) t2에 일치하지 않는 결과를 모두 제거합니다. 따라서 논리적으로는 INNER JOIN과 같습니다.