연산자 우선 순위(Transact-SQL)
복합 식에 여러 개의 연산자가 있을 때는 연산자 우선 순위에 따라 연산자 실행 순서가 결정됩니다. 실행 순서는 결과 값에 중대한 영향을 줄 수 있습니다.
다음 표에서는 연산자 우선 순위를 보여 줍니다. 우선 순위가 높은 연산자가 우선 순위가 낮은 연산자보다 먼저 평가됩니다.
순위 |
연산자 |
---|---|
1 |
~ (비트 NOT) |
2 |
*(곱하기), /(나누기), %(모듈로) |
3 |
+(양수), -(음수), +(더하기), +(연결), -(빼기), & (비트 AND), ^(배타적 비트 OR), |(비트 OR) |
4 |
=, >, <, >=, <=, <>, !=, !>, !<(비교 연산자) |
5 |
NOT |
6 |
AND |
7 |
ALL, ANY, BETWEEN, IN, LIKE, OR, SOME |
8 |
=(할당) |
한 식에서 두 연산자의 연산자 우선 순위 수준이 같은 경우에는 식에서의 위치를 기준으로 왼쪽에서 오른쪽 순으로 계산됩니다. 예를 들어 다음 SET 문에 사용된 식에서 빼기 연산자는 더하기 연산자보다 먼저 계산됩니다.
DECLARE @MyNumber int
SET @MyNumber = 4 - 2 + 27
-- Evaluates to 2 + 27 which yields an expression result of 29.
SELECT @MyNumber
괄호를 사용하면 식에서 연산자의 정의된 우선 순위를 바꿀 수 있습니다. 괄호 안의 모든 연산자가 먼저 계산되어 단일한 값을 만들면 괄호 밖의 다른 연산자가 그 값을 사용하게 됩니다.
예를 들어 다음 SET 문에 사용된 식에서 곱하기 연산자의 우선 순위가 더하기 연산자보다 높으므로 먼저 평가되어 식 결과가 13이 됩니다.
DECLARE @MyNumber int
SET @MyNumber = 2 * 4 + 5
-- Evaluates to 8 + 5 which yields an expression result of 13.
SELECT @MyNumber
다음 SET 문에서 사용된 식에서는 괄호 때문에 더하기가 먼저 수행되어 식 결과가 18이 됩니다.
DECLARE @MyNumber int
SET @MyNumber = 2 * (4 + 5)
-- Evaluates to 2 * 9 which yields an expression result of 18.
SELECT @MyNumber
식에 중첩된 괄호가 있는 경우에는 가장 안쪽의 중첩 식이 먼저 계산됩니다. 중첩된 괄호가 있는 다음 예에서는 5 - 3 식이 가장 안쪽에 중첩된 괄호 안에 있습니다. 이 식의 결과 값은 2입니다. 그런 다음 더하기 연산자(+)가 이 결과를 4에 더하여 값이 6이 됩니다. 마지막으로 6에 2가 곱해져 식 결과는 12가 됩니다.
DECLARE @MyNumber int
SET @MyNumber = 2 * (4 + (5 - 3) )
-- Evaluates to 2 * (4 + 2) which then evaluates to 2 * 6, and
-- yields an expression result of 12.
SELECT @MyNumber