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


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

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

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

Уровни приоритета операторов показаны в следующей таблице. Оператор с более высоким уровнем выполняется прежде, чем оператор с более низким уровнем. В следующей таблице самым высоким уровнем является 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)