SQL에서 OUTER와 CROSS APPLY의 실제 적용
OUTER 및 CROSS APPLY는 쿼리 유연성과 성능을 향상시킬 수 있는 SQL의 두 가지 매우 중요한 구조입니다. 고전적인 예는 난해해 보일 수 있지만 이러한 구조는 다양한 시나리오에서 실용적으로 적용됩니다.
1. 관련 데이터를 효율적으로 확보
두 개의 테이블이 있다고 가정해 보겠습니다. Contacts 테이블에는 연락처 세부 정보가 포함되어 있고 CommunicationEntries 테이블에는 통신 채널(전화, 팩스, 이메일)이 포함되어 있습니다. 연락처 정보 및 관련 통신 세부정보를 검색하려면 다음과 같이 CROSS APPLY를 사용할 수 있습니다.
<code class="language-sql">SELECT c.name, ce.communicationType, ce.channel FROM Contacts c CROSS APPLY ( SELECT * FROM CommunicationEntries ce WHERE ce.contactId = c.contactId ) ce;</code>
2. 테이블 값 함수 사용
테이블 반환 함수(TVF)는 테이블 형식 데이터를 동적으로 생성하는 방법을 제공합니다. CROSS APPLY를 사용하면 외부 쿼리의 각 행에 대해 TVF를 호출할 수 있습니다. 예를 들어 실행 중인 쿼리에 대한 쿼리 계획을 표시하려면 다음을 입력하세요.
<code class="language-sql">SELECT * FROM sys.dm_exec_query_stats AS qs CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle);</code>
3. 열 별칭 재사용
복잡한 쿼리 내에서 열 별칭을 재사용해야 하는 경우가 있습니다. CROSS APPLY를 사용하면 동일한 열에 대해 여러 별칭을 설정할 수 있으므로 쿼리를 더 쉽게 읽고 관리할 수 있습니다. 예:
<code class="language-sql">SELECT number, doubled_number, doubled_number_plus_one FROM master..spt_values CROSS APPLY (SELECT 2 * CAST(number AS BIGINT)) CA1(doubled_number) CROSS APPLY (SELECT doubled_number + 1) CA2(doubled_number_plus_one);</code>
4. 효율적으로 데이터 해제
정규화된 테이블 구조에서는 데이터가 열에 저장됩니다. 해제하면 이 데이터가 평면화되어 각 속성에 대한 행이 생성됩니다. OUTER APPLY는 특히 여러 열 세트를 해제해야 하는 경우 해제를 효율적으로 수행할 수 있습니다. 다음 시나리오를 고려해보세요.
<code class="language-sql">SELECT Id, Foo, Bar, GrpName FROM T CROSS APPLY (VALUES('1', Foo1, Bar1), ('2', Foo2, Bar2), ('3', Foo3, Bar3)) V(GrpName, Foo, Bar);</code>
위 내용은 OUTER 및 CROSS APPLY는 어떻게 SQL 쿼리 유연성과 성능을 향상시킬 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!