논리 연산자 선행 규칙
문에 논리 연산자가 두 개 이상 사용되면 NOT이 가장 먼저 평가되고 다음으로 AND, OR의 순서로 평가됩니다. 산술 및 비트 연산자는 논리 연산자보다 먼저 처리됩니다.
다음 예제에서 AND가 OR보다 우선하므로 제품 모델 21에는 색상 조건이 적용되지만 제품 모델 20에는 적용되지 않습니다.
USE AdventureWorks2008R2;
GO
SELECT ProductID, ProductModelID
FROM AdventureWorks2008R2.Production.Product
WHERE ProductModelID = 20 OR ProductModelID = 21
AND Color = 'Red'
OR를 먼저 평가하도록 괄호를 추가하면 쿼리의 의미를 변경할 수 있습니다. 다음 쿼리에서는 제품 모델 20 및 21에서 색상이 빨강인 제품만 찾습니다.
SELECT ProductID, ProductModelID
FROM AdventureWorks2008R2.Production.Product
WHERE (ProductModelID = 20 OR ProductModelID = 21)
AND Color = 'Red'
꼭 필요한 경우가 아니라도 괄호를 사용하면 쿼리의 가독성을 높이고 연산자 우선 순위로 인한 사소한 실수를 줄일 수 있습니다. 괄호를 사용하더라도 성능에는 거의 영향을 미치지 않습니다. 다음 예제는 첫 번째 예제와 구문적으로는 동일하지만 파악하기가 더 쉽습니다.
SELECT ProductID, ProductModelID
FROM AdventureWorks2008R2.Production.Product
WHERE ProductModelID = 20 OR (ProductModelID = 21
AND Color = 'Red')