Поделиться через


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

Применимо к:SQL ServerБаза данных SQL AzureУправляемый экземпляр SQL AzureБаза данных SQL в Microsoft Fabric

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

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

Level Operators
1 ~(битовая)NOT
2 * (умножение), / (деление), % (модуль)
3 +(положительное), - (отрицательное + ), (добавление), + (сцепление), - (вычитание), & (AND^битовая эксклюзивная), (битовая OR<< стрелка OR| влево), (битовая стрелка влево), >> (битовая стрелка вправо)
4 =, >, <, >=!=!><=<>( !< операторы сравнения)
5 NOT
6 AND
7 ALL, ANY, BETWEENINLIKEORSOME
8 = (назначение)
Level Operators
1 ~(битовая)NOT
2 * (умножение), / (деление), % (модуль)
3 +(положительное), (отрицательное), (добавление), + (сцепление), - (вычитание), & (ANDбитовая эксклюзивная), ^| (побитоваяOR)OR-+
4 =, >, <, >=!=!><=<>( !< операторы сравнения)
5 NOT
6 AND
7 ALL, ANY, BETWEENINLIKEORSOME
8 = (назначение)

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

DECLARE @MyNumber AS INT;
SET @MyNumber = 4 - 2 + 27;

-- Evaluates to 2 + 27 which yields an expression result of 29.
SELECT @MyNumber;

Чтобы изменить приоритет операторов в выражении, следует использовать скобки. Все находящееся внутри скобок вычисляется для получения одного значения. Любой оператор за пределами этих скобок может использовать это значение.

Например, если выражение использует инструкцию SET, то у оператора умножения более высокий приоритет, чем у оператора сложения. Сначала вычисляется операция умножения. Результатом выражения будет 13.

DECLARE @MyNumber AS INT;
SET @MyNumber = 2 * 4 + 5;

-- Evaluates to 8 + 5 which yields an expression result of 13.
SELECT @MyNumber;

В выражении следующей инструкции SET скобки показывают, что сначала нужно вычислить операцию сложения. Результатом выражения будет 18.

DECLARE @MyNumber AS 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 AS 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;