cross apply 예제

한 가지 더 예를 살펴보겠습니다. 지정된 데이터베이스에서 조각화가 50% 이상인 인덱스가 있는 테이블 목록을 얻으려고 합니다. 이러한 테이블을 검색하려면 “sys.dm_db_index_physical_stats” 보기와 “sys.table” 함수를 사용해야 합니다. 보시다시피 APPLY 연산자는 테이블 표현식(외부 테이블)에 의해 반환되는 각 행에 대해 테이블 값 함수를 불러오려는 경우에 유용한 도구가 될 수 있습니다. 연산자만 사용하여 외부 테이블을 함수에 조인하기만 하면 됩니다. 함수가 데이터를 반환하는 외부 테이블의 행만 포함하려면 CROSS APPLY 연산자를 사용합니다. 함수가 행에 대한 데이터를 반환하는지 여부에 관계없이 외부 테이블에서 모든 행을 반환하려면 OUTER APPLY 연산자를 사용합니다. APPLY 연산자의 두 형식에 대한 자세한 내용과 추가 예제를 보려면 SQL Server Book Online의 “APPLY 사용” 항목을 확인하십시오. 위의 예에서 CROSS APPLY 연산자는 테이블 값 함수가 데이터를 반환하는 외부 테이블의 행을 반환합니다. 알고 보니 두 예제모두에 사용되는 함수는 외부 테이블의 모든 행에 대한 데이터를 반환합니다. 그러나 경우에 따라 함수는 특정 행에 대한 데이터를 반환하지 않습니다. 외부 테이블의 행을 결과 집합에 포함하려면 OUTER APPLY 연산자를 사용해야 합니다.

일반 JOIN 절을 사용하여 동일한 작업을 수행할 수 있는지 궁금할 수 있으므로 APPLY 연산자는 언제, 어떻게 사용해야 합니까? 일반 JOIN에서는 동일하게 수행할 수 있지만 오른쪽 부분에 테이블 값 식이 있고 경우에 따라 APPLY 연산자 사용으로 쿼리 성능이 향상되는 경우 APPLY가 필요합니다. 몇 가지 예를 들어 설명하겠습니다. 함수가 올바른 결과를 반환하고 있는지 확인한 후 CROSS APPLY 연산자가 포함된 명령문 내에서 함수를 사용할 수 있습니다. 다음 예제에서는 Sales.vSalesPerson 보기에서 데이터를 검색 하 고 fn_sales 함수에 조인합니다: Microsoft는 SQL Server 2005에서 APPLY 연산자를 도입했습니다.