2012-03-12 2 views
4

, CROSS APPLY에 .. 가입 같은 단지 내가 함께 수행 할 수 있습니다 가입 생각 (상관 하위 쿼리)CROSS APPLY를 선택하고 EXISTS를 선택하면? 내가 읽은

내가 혼란 스러워요, CROSS 적용을 EXISTS 사용의 차이가 무엇인가도 EXISTS?

실종 신고는 언제해야합니까?

+1

그랜트의 의견 외에도 "CROSS APPLY"및 "OUTER APPLY"는 이국적인 작업입니다. APPLY를 사용하지 않고도 많은 중요한 작업을 오래 동안 할 수 있습니다. 그것에 대해 배우는 것을 좌절시키지 말고 그것을 명심하십시오, 그러나 당신은 적용 할 수있는 기회를 찾을 것입니다. Itzik Ben-Gan의 TSQL Querying 사본을 빌리거나 온라인에서 일부 페이지를 읽을 수있는 경우 "TOP 및 APPLY"라는 장이 있습니다. 거기에있는 응용 프로그램은 1) 전형적이고 2) 매우 흥미롭지는 않습니다. –

+0

예, Itzik Ben-Gan의 책은 +10입니다. 그것은 반드시 소유해야합니다. –

+0

@GrantFritchey : +10? !! 보통 사람들은 +1을주었습니다. : D;) – dotNETbeginner

답변

6

CROSS APPLY는 JOIN과 (와)의 차이가 없습니다. JOIN은 두 데이터 집합 사이에서 일치하는 (또는 일치하지 않는) 행을 찾습니다. CROSS APPLY는 적용 대상의 모든 행에 대해 쿼리를 실행하는 방법입니다. 이것은 JOIN의 작동 방식과 같은 필터링 메커니즘으로 작동 할 수 있지만 각 행에 무언가를 적용하므로 해당 방식을 고려해야합니다.

하위 쿼리의 EXISTS는 완전히 다른 필터링 메커니즘입니다. 빠른 검색 방법입니다. 뭔가를 발견하면 즉시 검색을 중단하기 때문입니다. EXISTS를 일반적으로 사용하고 싶은 곳은 필터 기준에 대한 명중 가능성이 높기 때문에 검색을 가능한 한 짧게 만듭니다. 그러나 EXISTS는 모든 경기를 찾지 못합니다. 첫 번째 일치 항목을 찾은 다음 검색을 중지합니다.

이렇게 세 가지 다른 방법으로 동일한 결과를 얻을 수 있지만 정의 된대로 사용하면 좋을 것입니다. 글자 그대로 두 세트의 데이터를 조인하는 경우 JOIN을 사용하십시오. 데이터 세트의 모든 행에 대해 프로세스 (자주 필터)를 실행하려면 CROSS APPLY를 사용하십시오. 가능한 확실한 일치 항목에 빠른 필터를 사용하려면 EXISTS를 사용하십시오.