공통 테이블 표현식 (CTES)은 일시적이며 단일 SQL 문의 실행 범위 내에 존재하는 명명 된 결과 세트입니다. 그것들은 WITH
절을 사용하여 정의 된 다음 CTE 정의, 그리고 CTE를 사용하는 기본 쿼리가 이어집니다. 이를 통해 복잡한 쿼리를 더 작고 관리하기 쉬운 부품으로 분류하여 가독성과 유지 관리를 향상시킬 수 있습니다.
예를 들어 설명합시다. Orders
과 Customers
두 가지 테이블이 있다고 가정합니다. 특정 도시의 고객이 '런던'이라고 말하는 모든 주문을 찾고 싶습니다. CTE가없는 복잡한 쿼리는 다음과 같습니다.
<code class="sql">SELECT o.OrderID, o.OrderDate, c.CustomerID, c.CustomerName FROM Orders o JOIN Customers c ON o.CustomerID = c.CustomerID WHERE c.City = 'London';</code>
CTE를 사용하면 다음을 단순화 할 수 있습니다.
<code class="sql">WITH LondonCustomers AS ( SELECT CustomerID FROM Customers WHERE City = 'London' ) SELECT o.OrderID, o.OrderDate, c.CustomerID, c.CustomerName FROM Orders o JOIN Customers c ON o.CustomerID = c.CustomerID WHERE c.CustomerID IN (SELECT CustomerID FROM LondonCustomers);</code>
LondonCustomers
CTE는 런던에서 모든 고객을 선택합니다. 그런 다음 기본 쿼리는이 CTE를 사용하여 주문을 필터링합니다. 이 접근법은 원래의 단일 쿼리 접근 방식보다 더 명확하고 이해하기 쉽습니다. CTE는 쿼리를 효과적으로 모듈화하여 디버깅하고 유지 관리하기가 쉽습니다.
CTE와 하위 쿼리는 모두 유사한 결과를 얻을 수 있지만 CTE는 몇 가지 장점을 제공합니다.
전적으로! CTE는 특히 복잡한 쿼리에 대한 SQL 코드의 가독성과 유지 보수성을 크게 향상시킵니다. 큰 쿼리를 더 작은 논리 단위로 나누어 CTE는 코드의 전반적인 구조와 구성을 향상시킵니다. 이를 통해 쿼리의 논리를 쉽게 이해하고 오류를 식별하며 수정할 수 있습니다. CTE에 대한 설명 이름을 사용하면 가독성이 향상되어 개발자가 쿼리의 각 부분의 목적을 빠르게 파악할 수 있습니다. 이로 인해 개발 시간이 줄어들고 오류가 적고 팀 구성원 간의 협업이 쉬워집니다.
재귀 CTE는 조직 차트, 자료 또는 파일 시스템과 같은 계층 적 데이터를 처리하기위한 강력한 도구입니다. 이를 통해 CTE 정의 내에서 자신을 반복적으로 참조하여 계층 구조를 가로 질러 가질 수 있습니다.
재귀 CTE의 구조에는 두 부분이 포함됩니다.
조직 차트의 예를 고려해 봅시다.
<code class="sql">WITH RECURSIVE EmployeeHierarchy AS ( -- Anchor member: Select the top-level employees SELECT EmployeeID, ManagerID, EmployeeName, Level = 0 FROM Employees WHERE ManagerID IS NULL UNION ALL -- Recursive member: Join the CTE to itself to get subordinates SELECT e.EmployeeID, e.ManagerID, e.EmployeeName, eh.Level 1 FROM Employees e INNER JOIN EmployeeHierarchy eh ON e.ManagerID = eh.EmployeeID ) SELECT * FROM EmployeeHierarchy;</code>
이 재귀 CTE는 최상위 직원 (관리자가없는 직원)으로 시작합니다. 그런 다음 재귀 멤버는 CTE에 Employees
테이블에 가입하여 각 직원의 부하 직원을 찾아 계층 구조의 각 레벨에 대한 Level
증가시킵니다. 이것은 모든 직원이 결과 세트에 포함될 때까지 계속됩니다. UNION ALL
앵커와 재귀 멤버의 결과를 결합합니다. Level
열은 계층 구조를 시각화하는 데 도움이됩니다. 앵커 멤버에서 WHERE ManagerID IS NULL
최상위 직원 만 초기 선택에 포함되도록합니다. 이것은 무한 재귀를 피하는 데 중요한 부분입니다. 무한 루프를 방지하기 위해 항상 명확한 종료 조건이 있어야합니다.
위 내용은 SQL에서 공통 테이블 표현식 (CTE)을 사용하여 복잡한 쿼리를 단순화하려면 어떻게합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!