본문 바로가기

프로그래밍/MSSQL

[MSSQL] SQL Server APPLY 연산자 (테이블 반환 함수와 테이블의 조인)

반응형

 

 

 

APPLY

JOIN 및 서브쿼리, 커서를 대체할 수 있는 APPLY에 대해 알아보자

APPLY 연산자를 사용하면 쿼리의 외부 테이블 식에서 반환한 각 행에 대해 테이블 반환함수를 호출할 수 있다. 

APPLY 연산자에는 CROSS APPLY와 OUTER APPLY가 있다.

 

CROSS APPLY

테이블 반환 함수로부터 결과 집합을 생성하는 외부 테이블의 행만 반환한다.

 

OUTER APPLY

테이블 반환 함수로부터 결과 집합을 생성하는 행과 그렇지 않은 행을 모두 반환한다.

 

 

 

예제

다음의 값을 갖고 있는 테이블 TABLE_A가 있다.

 

ID NAME YYMMDD
1 손꽁쥐 20001020
2 우바보 19550929
3 윤박사 19840303

 

 

그리고 FN_GET_INFO라는 테이블 반환함수가 있다.

해당 함수는 인자로 ID값을 받아서 다음과 같은 결과를 반환한다.

 

SELECT * FROM dbo.FN_GET_INFO(1)

 

ID HOBBY BLOOD TYPE
1 soccer B

 

 

테이블 TABLE_A와 함수를 조인해서 다음과 같은 결과를 얻고자 한다.

 

ID NAME YYMMDD HOBBY BLOOD TYPE
1 손꽁쥐 20001020 soccer B
2 우바보 19550929 volleyball O
3 윤박사 19840303 archery AB

 

 

 

INNER JOIN을 이용하면 가능할까?

 

SELECT *
FROM TABLE_A A
INNER JOIN dbo.FN_GET_INFO(A.ID) B ON A.ID = B.ID

 

위와 같이 INNER JOIN을 이용한 쿼리문은 오류가 난다.

 

 

 

그렇다면 어떤 식으로 쿼리를 짜줘야 할까?

바로 CROSS APPLY를 이용하면 된다.

 

SELECT *
FROM TABLE_A A
CROSS APPLY dbo.FN_GET_INFO(A.ID) B

 

위의 쿼리는 정상적으로 우리가 원하는 결과를 반환해준다.

 

 

 

반응형