2011-05-03 5 views
0

가능한 중복 :
WHERE clause better execute before IN and JOIN or after
INNER JOIN versus WHERE clause — any difference?크로스 가입 차이 질문

무엇있는 경우, 다음의 차이점은?

Select 
    col1, 
    col2 
From TableA A 
Inner Join TableB B on A.ID = B.ID 

Select 
    col1, 
    col2 
from TableA A, TableB B 
where A.ID = B.ID 

그들은 그들은 가능성이 RDBMS에 의해 같은 일에 최적화됩니다

+0

'CROSS JOIN'이 아니라는 점에 유의하십시오. 두 쿼리는 모두'INNER JOIN'입니다. –

답변

0

, SQL에서 같은 행동을 갖고있는 것 같다. 그들은 모두 JOIN 테이블의 A.ID = B.ID 기준에 있습니다.

그러나 JOIN 구문은 명시 적이며 올바른 것으로 간주됩니다.

0

전자는 ANSI-89 구문이고 후자는 ANSI-92 구문입니다. 후자는 ANSI-92 구문으로 표현할 때 외부 조인을 사용하기 시작할 때 훨씬 더 명확하다는 사실 때문에 거의 항상 사용되어야합니다.

0

첫 번째 구문은 두 테이블의 교차 조인 또는 카디 전 곱을 (사용자가 지적한대로) 나타냅니다. 옵티 마이저가없는 시스템 (또는 최적화되지 않은 프로그램)에서는 두 번째 테이블의 모든 레코드와 결합 된 첫 번째 테이블의 모든 레코드 조합을 생성 한 다음 WHERE 절과 일치하는 레코드 만 필터링합니다.

두 명령문의 출력이 같고 사용중인 시스템의 성능이 다른 옵티마이 저보다 좋은 경우 성능도 동일합니다. 내가 제공하는 것이

두 코멘트 :

1) 나는 문을 작성할 때 더 나은 당신의 의도에 대해 명시 적으로 찾을 수 있습니다. INNER JOIN을 수행하려면 INNER JOIN 구문을 사용하십시오. 미래 6 개월의 양식은 이제 감사 할 것입니다.

2) SQL Server의 최적화 프로그램은이 상황에서 INNER JOIN을 수행하지만 (적어도 최신 버전은 모든 버전을 보증 할 수는 없지만) SQL Server 버전에 따라 그 경로가 얼마나 달라지는 지 짐작할 수 있습니다 서버 엔진이며 앞으로도 동일하게 유지 될 수는 없습니다 (이 상황에서 변경 될지는 의심 스럽지만 실제로는 그만큼 높은 문자를 입력하는 데 드는 비용이 많이 듭니까?)

0

@ypercube가 정확하게 사용자의 질문을 지적했습니다. 두 개의 서로 다른 INNER JOIN 구문입니다. 외부 조인 구문이 없습니다. @Matt Whitfield가 지적한대로 첫 번째 구문은 ANSI-92이고 두 번째 구문은 ANSI-89 스타일입니다. ANSI-92 문법은 좀 더 복잡한 방식으로 더 복잡한 쿼리에서 매트가 전적으로 동의합니다.

또한 SQL Server의 버전에 따라 ANSI-89 구문이 권장되지 않으므로 문제가 발생할 수 있습니다. SR0010: Avoid using deprecated syntax when you join tables or views을 참조하십시오. 사실, 다음 버전 SQL 2011 또는 Denali 또는 ANSI-89 구문은 지원되지 않습니다. 참조 : Features Not Supported in the Next Version of SQL Server (단어 "조인"검색).