- CROSS APPLY와 OUTER APPLY는 JOIN과 동일한 결과값을 반환할 수 있다.
- 하지만, JOIN과는 다른 실행계획을 가질 수 있고, JOIN 으로는 수행 불가능한 구문을 수행시켜주기도 한다.
- 서브 쿼리에 외부 테이블의 컬럼을 인자로 사용할 수 있다.
- 테이블 반환함수의 인자값으로, 외부 테이블의 컬럼을 적용해 JOIN과 같은 결과값을 낼 수 있다.
- 상황에 따라 JOIN보다 더 좋은 성능을 발휘할 수 있다.
CROSS APPLY
SELECT *
FROM TBL_A
CROSS APPLY (
SELECT * FROM TBL_B
)
WHERE ...
OUTER APPLY
SELECT *
FROM TBL_A A
OUTER APPLY (
SELECT * FROM TBL_B
WHERE A.COL1 = B.COL1
) B
- 회사에서 JOIN으로 데이터를 조회하는데 데이터가 중복으로 JOIN 되어 원하는 결과값이 나오지 않았다.
- 그래서 JOIN 대신 OUTER APPLY를 사용해 문제를 해결했다.
SELECT A.COL1
, A.COL2
, A.COL3
, ISNULL(S.COL4, 0) AS COL4
, ISNULL(S.COL5, 0) AS COL5
FROM SALEDB.dbo.TABLE_A A WITH(NOLOCK)
OUTER APPLY (
SELECT SUM(B.COL6) AS COL6
, SUM(B.COL7) AS COL7
FROM SALEDB.dbo.TABLE_B B WITH(NOLOCK)
WHERE B.COL8 = A.COL1
AND B.COL9 BETWEEN A.COL2 AND A.COL3
) S
WHERE A.COL1 = '00554055'
- 당시 사용했던 쿼리를 일부 수정한 것이다.
- A의 각 행을 돌면서 OUTER APPLY에서 WHERE 절에 해당하는 행들을 JOIN 하는 것이다.
*** GPT
'회사 > DB' 카테고리의 다른 글
[MSSQL] 조회 속도 개선 (0) | 2025.02.21 |
---|---|
[DB] Index와 Column, 비교연산자 (0) | 2024.12.16 |
[DB / MSSQL] / SELECT - INTO (0) | 2024.11.06 |
[DB / MSSQL] LOB (Large Object / 대형 오브젝트) (0) | 2024.10.29 |
[DB / MSSQL] 날짜조회 BETWEEN (1) | 2024.10.28 |