2012-09-29 6 views
4

연산자 APPLY은 연산자가 아닙니다. 사용 경험이 있습니다. 특정 가능성이 없습니다. APPLY, CROSS 또는 OUTER은 내가 사용하는 첫 번째 일은 있어야 할 곳에가 다른 상황이를 - 알렉산더의 예에서APPLY - 이것은 함수에 결합 할 때 독점적으로 사용됩니다

This article by Alexander Kuznetsov gives a good example

그는 함수의 반환에 가입 APPLY를 사용?

+1

RE : "나는 나는 특정 가능성을 놓치고있다 "고 걱정했다. [일부는 여기에 사용] (http://stackoverflow.com/questions/9275132/real-life-example-when-to-use-outer-cross-apply-in-sql/9275865#9275865) –

+0

+1 mr 스미스 - 감사합니다 – whytheq

답변

2

APPLY는 이전 테이블의 각 행을 함수 또는 하위 쿼리로 APPLY 수 있도록하는 행 단위 연산자입니다. 따라서 당신이 에서 각 레코드에 테이블 반환 함수를 실행해야

  1. 당신이
  2. 에 각 레코드에서 B에서 최신/최대/최소 기록이 필요한 상황에서 매우 유용합니다

    예, JOIN을 대체 할 수는 있지만 정상적인 JOIN이 작동하는 곳에서는 SQL Server가 행 기반의 JOIN 대신 행을 사용하도록하기 때문에 JOIN을 대체 할 수 있습니다.

    CROSS APPLY와 OUTER APPLY의 차이는 INNER JOIN과 OUTER JOIN의 차이와 같습니다. 기본적으로 CROSS APPLY는 적용되는 함수/하위 쿼리가 0 레코드를 반환하면 소스 레코드를 제거합니다. OUTER APPLY는 소스 레코드를 유지합니다.

    더 읽기 : 그 다음 결과 집합을 생산하는 매개 변수로 테이블이나 테이블 반환 함수를 구동하는 모든 행을 통과 외부 테이블의 결과를 소요 루프처럼 행동 Using Apply (msdn)

2

APPLY은 임의의 결과 집합에 참여할 수 있습니다. 나는 특히 유용 어떤 순서로 TOP 1 행을 반환하는 찾습니다

select * 
from T 
cross apply (
select top 1 * from T2 order by DateTime desc 
) x 

APPLY이 모든 캔 등을 가입 할 수 있습니다. 그러나 조인 힌트는 사용할 수 없습니다.

기본적으로 조인이면 충분합니다. 사용하기가 조금 더 복잡하기 때문에 더 많이 사용하려면 apply를 사용하십시오.

+0

"가입 힌트"란 무엇입니까? – whytheq

+0

http://msdn.microsoft.com/en-us/library/ms173815.aspx – usr

0

는 기본적으로 두 개의 결과 집합을 결합하는 사용에 가입하지만 CROSS이 적용됩니다. CROSS APPLY와 OUTER APPLY를 적용 할 때 두 가지 양식이 있습니다. CROSS APPLY t 드라이브 테이블 또는 테이블 반환 함수와 일치하는 행만 반환하고 OUTER APPLY 결과는 외부 테이블의 모든 레코드와 드라이브 테이블의 일치를 찾습니다. 느린 쿼리가 결합되므로 apply를 사용하지 마십시오.

관련 문제