Приоритет операторов (Transact-SQL)

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure

Если сложное выражение содержит множество операторов, порядок выполнения операций определяется приоритетом операторов. Порядок исполнения может существенно повлиять на результирующее значение.

Уровни приоритета операторов показаны в следующей таблице. Оператор с более высоким уровнем выполняется прежде, чем оператор с более низким уровнем. В следующей таблице самым высоким уровнем является 1, а самым низким — 8.

Уровень Операторы
1 ~ (побитовое НЕ)
2 * (умножение), / (деление), % (остаток деления)
3 + (положительное), - (отрицательное), + (добавление), + (сцепление), - (вычитание), & (битовое И), ^ (битовое эксклюзивное ИЛИ), | (битовое ИЛИ)
4 =, >, <, >=, <=, <>, !=, !>, !< (операторы сравнения)
5 Логическое НЕ
6 И
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;  

См. также

Логические операторы (Transact-SQL)
Операторы (Transact-SQL)
Встроенные функции (Transact-SQL)