CROSS APPLY 란, 그리고 OUTER APPLY 란
table-valued expression 이 사용가능한 조인 방법을 의미합니다.
table-valued expression 은 함수에서 RETURN 타입이 테이블 형태인 경우를 의미합니다.
테스트는 아래의 2개 테이블과 1개의 함수로 진행해 보겠습니다.
함수의 내용을 보게되면 결국 매개인자로 테이블의 데이터를 반환한다 라는 것을 확인할 수 있습니다.
CREATE TABLE FIRST_TABLE (C1 INT, C2 INT)
INSERT INTO FIRST_TABLE VALUES (1, 1), (2, 2), (3, 3), (4, 4), (5, 5)
GO
CREATE TABLE SECOND_TABLE (C1 INT, C2 INT)
INSERT INTO SECOND_TABLE VALUES (1, 1), (2, 2), (3, 3)
GO
CREATE FUNCTION APPLY_FUNCTION (@intValue AS INT)
RETURNS TABLE
AS
RETURN
SELECT * FROM SECOND_TABLE WHERE C1 = @intValue
GO
들어가기 앞서, CROSS APPLY 와 OUTER APPLY 는 조인방법으로 APPLY_FUNCTION 함수를 사용할 수 있습니다.
반면, INNER JOIN 과 LEFT OUTER JOIN 은 조인방법으로 APPLY_FUNCTION 함수를 사용할 수 없습니다.
또한, 많은 이유에 의해서 CROSS APPLY 의 PLAN 이 INNER JOIN 의 PLAN 보다 훨씬 좋다고도 나와 있습니다.
https://explainextended.com/2009/07/16/inner-join-vs-cross-apply/
CROSS APPLY 와 INNER JOIN
CROSS APPLY 와 INNER JOIN 은 동일한 의미를 지니게 됩니다.
아래 3개의 쿼리를 실행하고 나온 결과값을 확인해 보겠습니다.
SELECT * FROM FIRST_TABLE FT CROSS APPLY APPLY_FUNCTION(FT.C1)
SELECT * FROM FIRST_TABLE FT CROSS APPLY ( SELECT * FROM SECOND_TABLE ST WHERE ST.C1 = FT.C1 ) ST
SELECT * FROM FIRST_TABLE FT INNER JOIN SECOND_TABLE ST ON ST.C1 = FT.C1
OUTER APPLY 와 LEFT OUTER JOIN
OUTER APPLY 와 LEFT OUTER JOIN 역시 동일한 의미를 지니게 됩니다.
SELECT * FROM FIRST_TABLE FT OUTER APPLY APPLY_FUNCTION(FT.C1)
SELECT * FROM FIRST_TABLE FT OUTER APPLY ( SELECT * FROM SECOND_TABLE ST WHERE ST.C1 = FT.C1 ) ST
SELECT * FROM FIRST_TABLE FT LEFT OUTER JOIN SECOND_TABLE ST ON ST.C1 = FT.C1
cross apply 와 outer apply 의 샘플사이트
https://www.mssqltips.com/sqlservertip/1958/sql-server-cross-apply-and-outer-apply/
'SQL Server > SQL Server 기타' 카테고리의 다른 글
[MSSQL] SQL Server 멀티 인스턴스 구조 (3) | 2019.05.21 |
---|---|
[MSSQL] SQL Server 아키텍처, 저장소 구조, 메모리 구조 (1) | 2019.05.20 |
[MSSQL] REVOKE 와 DENY 의 차이점 (0) | 2019.04.03 |
[MSSQL] COLLATE 데이터 정렬. Korean_Wansung_CI_AS 및 각 옵션에 대한 설명 (0) | 2019.04.03 |
[MSSQL] 사이즈가 큰 하나의 로그 파일 vs 사이즈가 작은 다수의 로그 파일. 어떤걸 선택할까? (0) | 2019.04.03 |