복잡한 쿼리 간단 정리 함수, WITH 함수(CTE)

shimshim 2024. 8. 18. 22:22

 

업무시 쿼리를 작성하다 보면 반영시킬 내용이 복잡해지면서 쿼리 자체가 길게 늘어지는 경우가 상당히 많습니다.

당장 결과 도출을 위해서 어떤 식으로든 작성해도 상관은 없을 수 있지만, 

이 쿼리를 누군가 참고할 수 있도록, 혹은 바로 협업 가능하게끔 가독성을 높여 두면

그 활용 가치는 훨씬 더 높아지게 됩니다. 

 

그런 차원에서 활용하기 좋은 함수가 있는데요, 바로 WITH 함수입니다.

 

WITH 함수란?

WITH함수는 사전적 의미(=함께, 포함된 등)에 맞게 전체 쿼리에 함께 사용되는 또 다른 쿼리를 '함께' 사용할 때 쓰이는 함수입니다.

 

전체 쿼리 내용이 복잡해 지고, 여러 테이블을 정의해야 된다면 그 특정 쿼리 내에서만 일시적으로 사용 되는 테이블(CTE)들이 계속 생성되기도 하는데요,

그런 경우 하위 테이블들 각각에 의미를 부여한 테이블 정의를 WITH 절(=WITH 함수)로 할 수 있게 되는 것입니다.

 

그럼 여기서 WITH 함수로 정의되는 CTE는 무엇인지 알아볼까요??

 

CTE??

CTE(Common Table Expression)은 특정 쿼리 내에서 일시적으로 사용할 수 있는 이름이 부여된 임시 데이터 결과의 집합으로 볼 수 있습니다.

 

'특정' 쿼리 내에서 '임시'로 정의되는 데이터 집합인 만큼 공식적으로 정의된 테이블이 아니며, 여러 데이터 집합을 참조하여 데이터를 호출해야 되는 경우 유용하게 사용됩니다.

 

CTE 사용시 주의 사항으로는

 

첫째, WITH 함수로만 불러올 수 있다는 점

둘째, SELECT 쿼리를 통해서만 데이터를 추출하거나 가공할 수 있다는 점

셋째, 단일 쿼리 내에서만 정의, 호출 될 수 있다는 점

등이 있습니다.

 

따라서, 단일 쿼리 내에서 특정 결과를 보다 쉽게 추출/가공하기 위해서는

WITH 함수와 CTE를 참고해 보실 수 있습니다.