2012-03-03 5 views
3

안녕하세요 여러분은 SQL의 AND 절에 대해 특정 질문이 있습니다.내부 조인 또는 WHERE 절의 AND 문 차이점

SELECT * FROM Table1 t1 INNER JOIN Table2 t2 ON t1.id = t2.id AND t2.id = 0 


SELECT * FROM Table1 t1 INNER JOIN Table2 t2 ON t1.id = t2.id WHERE t2.id = 0 

공지 사항 쿼리의 끝 부분에 차이 :

두 다음 SQL 문

는 동일한 출력을 제공합니다. 첫 번째 구문에서는 WHERE 절을 사용하지 않고 AND 절을 사용합니다. 두 번째에서는 내 ID를 지정하기 위해 WHERE를 사용합니다.

첫 번째 구문이 정확합니까? 그렇다면 성능 측면에서 첫 번째가 더 좋습니다 (WHERE 절을 필터링에 사용하지 않음). 다른 쿼리를 사용하여 다른 결과를 기대해야합니까?

도움 주셔서 감사합니다.

+2

당신은 데이터베이스에 의해 생성 된 쿼리 계획을 살펴보고, 다른 경우 볼 수 있습니다. MySQL 데이터베이스를 사용하면 EXPLAIN 문을 사용하여이를 수행 할 수 있습니다. 다른 데이터베이스의 경우 비슷한 것일 수 있습니다. –

답변

11

예, 아니요, 아니요.

은 구체적으로 :

  1. 예, 구문이 정확합니다. 개념적으로 첫 번째 쿼리는 과 t2 사이에 내부 조인을 만들고 조인 조건은 t1.id = t2.id AND t2.id = 0이고 두 번째 쿼리는 t1.id = t2.id에서 내부 조인을 만든 다음 t2.id = 0 조건을 사용하여 결과를 필터링합니다.

    그러나 실제로 알고있는 SQL 엔진은 그런 쿼리를 실제로 실행하지 않습니다. 오히려 두 경우 모두 엔진은 두 가지 모두를 t1.id = 0 AND t2.id = 0과 같은 것으로 최적화 한 다음 두 개의 단일 행 조회를 수행합니다.

  2. 아니오, 거의 모든 합리적인 SQL 엔진이이 두 쿼리를 효과적으로 동일하게 처리해야합니다.

  3. 아니요, 위를 참조하십시오. 그런데

는 동일한 쿼리를 작성하는 다음과 같은 방법도 유효합니다

SELECT * FROM Table1 t1 INNER JOIN Table2 t2 WHERE t1.id = t2.id AND t2.id = 0 

SELECT * FROM Table1 t1, Table2 t2 WHERE t1.id = t2.id AND t2.id = 0 
+0

짧고 달콤하고 단순한 +1! – Ben

+2

좋은 답변입니다. INNER JOIN을 사용하면 모든 것이 상당히 간단합니다. OUTER JOIN과 적절하게 복잡한 조건을 사용하면 필터링 작업이 JOIN에 있는지 또는 (기본 쿼리의) WHERE 절에 있는지 여부를 결정할 수 있습니다. –

+0

주 대답은 Thx입니다. 그리고 예. 외부 조인의 경우이 조나단에 주목했습니다. 귀하의 의견을 보내 주셔서 감사합니다! 편집 : 그래, 두 번째 방법 Ilmary에 대한하지만 오히려 ANSI 구문을 고수하고 싶습니다. – Alex