SQL WHERE 절과 계산된 SELECT 절 값: 실용 가이드
SQL 쿼리의 WHERE 절 내에서 SELECT 문에 정의된 별칭을 직접 참조하면 오류가 발생하는 경우가 많습니다. 이는 평가 순서 때문입니다. SELECT 절은 WHERE 절 다음에 처리됩니다.
다음 문제가 있는 예를 생각해 보세요.
<code class="language-sql">SELECT (InvoiceTotal - PaymentTotal - CreditTotal) AS BalanceDue FROM Invoices WHERE BalanceDue > 0;</code>
BalanceDue
절이 평가될 때 WHERE
이 아직 정의되지 않았기 때문에 이 쿼리는 실패합니다.
두 가지 효과적인 솔루션은 다음과 같습니다.
1. 하위 쿼리 사용:
이 접근 방식은 하위 쿼리를 사용하여 값을 미리 계산하므로 외부 쿼리의 WHERE 절에서 사용할 수 있습니다.
<code class="language-sql">SELECT BalanceDue FROM ( SELECT (InvoiceTotal - PaymentTotal - CreditTotal) AS BalanceDue FROM Invoices ) AS sub WHERE BalanceDue > 0;</code>
내부 쿼리는 BalanceDue
을 계산하고, 외부 쿼리는 미리 계산된 결과를 기반으로 필터링합니다.
2. WHERE 절의 중복 계산:
또는 WHERE 절 내에서 직접 계산을 반복할 수도 있습니다.
<code class="language-sql">SELECT (InvoiceTotal - PaymentTotal - CreditTotal) AS BalanceDue FROM Invoices WHERE (InvoiceTotal - PaymentTotal - CreditTotal) > 0;</code>
이 방법은 더 간단하지만 표현식이 두 번 평가되므로 매우 복잡한 계산으로 인해 성능 문제가 발생할 수 있습니다.
성능 최적화:
SQL Server와 같은 최신 데이터베이스 시스템은 쿼리를 최적화하여 반복 참조가 있어도 복잡한 계산을 한 번만 실행하는 경우가 많습니다. 그러나 매우 복잡하거나 성능에 민감한 계산의 경우 WHERE
절 내에서 계산을 반복하는 것은 피해야 합니다.
자주 사용되는 계산 값의 경우 계산 열을 만드는 것이 장기적으로 더 효율적인 솔루션입니다. 이렇게 하면 계산된 값이 지속적으로 저장되어 쿼리 성능이 크게 향상됩니다.
위 내용은 SQL의 WHERE 절에서 계산된 SELECT 절 값을 어떻게 참조할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!