Условное выражение IF…ELSE в SQL Server: пример запроса SELECT на T-SQL.
⚡ Умное резюме
Оператор IF…ELSE — это оператор управления потоком выполнения в SQL Server, который выполняет один блок T-SQL, когда логическое условие оценивается как истинное, и необязательный альтернативный блок, когда то же условие оценивается как ложное.

Зачем вам нужны условные операторы?
Условные операторы в SQL Server помогают определять различную логику и действия для разных условий. Они позволяют выполнять различные действия в зависимости от условий, определенных в операторе. В реальной жизни вы выполняете множество действий, которые зависят от результата какой-либо другой деятельности или ситуации.
Вот несколько примеров использования условного оператора в реальном времени:
- Если завтра будет дождь, я запланирую автомобильное путешествие.
- Если авиабилеты из моего города будут стоить меньше 400 долларов, то я поеду в отпуск в Европу; в противном случае я предпочту какое-нибудь туристическое место поблизости.
Здесь видно, что одно действие, например, поездка на автомобиле, описанная выше, условно зависит от результата другого действия, а именно от того, «будет ли завтра дождь или нет». Аналогично, MS SQL Server Также предоставляет возможность выполнять оператор T-SQL в условном режиме.
Оператор IF…ELSE в SQL Server
В MS SQL оператор IF…ELSE — это тип условного оператора. Любой оператор T-SQL может быть выполнен условно с помощью IF…ELSE. На рисунке ниже показано, как работают ветви IF и ELSE в SQL Server:
- Если условие оценивается как истинное, то выполняются операторы T-SQL, следующие за условием IF в SQL Server.
- Если условие оценивается как ложное, то выполняются операторы T-SQL, следующие за ключевым словом ELSE.
- После выполнения оператора IF или оператора ELSE T-SQL выполнение остальных безусловных операторов T-SQL продолжается.
Синтаксис и правила IF…ELSE в SQL
Синтаксис:
IF <Condition> {Statement | Block_of_statement} [ ELSE {Statement | Block_of_statement}]
Правила:
- Условие должно представлять собой логическое выражение, то есть при его выполнении результатом будет логическое значение.
- Оператор IF…ELSE в SQL может условно обрабатывать как отдельный оператор T-SQL, так и блок операторов T-SQL.
- Блок операторов должен начинаться с ключевого слова BEGIN и заканчиваться ключевым словом END.
- Использование операторов BEGIN и END помогает SQL Server идентифицировать блок операторов, который необходимо выполнить, и отделить его от остальных операторов T-SQL, не входящих в блок IF…ELSE.
- ELSE не является обязательным.
IF…ELSE с числовым значением в логическом выражении
В первом примере логическое выражение использует только числовые значения. Рассмотрим условие ниже, которое всегда истинно, поскольку 1 равно 1.
Условие: ВЕРНО
IF (1=1) PRINT 'IF STATEMENT: CONDITION IS TRUE' ELSE PRINT 'ELSE STATEMENT: CONDITION IS FALSE'
При выполнении запроса с истинным условием (1=1) выводится сообщение ветви IF:
Условие: ЛОЖЬ
IF (1=2) PRINT 'IF STATEMENT: CONDITION IS TRUE' ELSE PRINT 'ELSE STATEMENT: CONDITION IS FALSE'
При ложном условии (1=2) выполняется ветвь ELSE:
Предположим, у вас есть таблица с именем 'Guru'99' с двумя столбцами и четырьмя строками, как показано ниже. Мы будем использовать этот 'GuruТаблица 99 приведена в следующих примерах.
IF…ELSE с переменной в логическом выражении
Вместо постоянных чисел логическое выражение может сравнивать переменнаяВ следующем примере объявляется целочисленная переменная и проверяется её значение.
Условие: ВЕРНО
DECLARE @Course_ID INT = 4 IF (@Course_ID = 4) Select * from Guru99 where Tutorial_ID = 4 ELSE Select * from Guru99 where Tutorial_ID != 4
Поскольку @Course_ID равно 4, выполняется ветвь IF, которая возвращает строку, где Tutorial_ID равно 4:
Условие: ЛОЖЬ
DECLARE @Course_ID INT = 4 IF (@Course_ID != 4) Select * from Guru99 where Tutorial_ID = 4 ELSE Select * from Guru99 where Tutorial_ID != 4
В данном случае условие ложно, поэтому выполняется ветвь ELSE, которая возвращает все строки, где Tutorial_ID не равен 4:
ЕСЛИ…ИНАЧЕ с НАЧАЛО…КОНЕЦ
Если в ветви должно выполняться более одного оператора, заключите эти операторы в блок BEGIN…END. В приведенном ниже примере в каждой ветви выполняются два оператора SELECT.
Условие: ВЕРНО
DECLARE @Course_ID INT = 2 IF (@Course_ID <=2) BEGIN Select * from Guru99 where Tutorial_ID = 1 Select * from Guru99 where Tutorial_ID = 2 END ELSE BEGIN Select * from Guru99 where Tutorial_ID = 3 Select * from Guru99 where Tutorial_ID = 4 END
Поскольку @Course_ID меньше или равно 2, блок IF выполняет оба оператора SELECT внутри BEGIN…END:
Условие: ЛОЖЬ
DECLARE @Course_ID INT = 2 IF (@Course_ID >=3) BEGIN Select * from Guru99 where Tutorial_ID = 1 Select * from Guru99 where Tutorial_ID = 2 END ELSE BEGIN Select * from Guru99 where Tutorial_ID = 3 Select * from Guru99 where Tutorial_ID = 4 END
На этот раз условие ложно, поэтому блок ELSE выполняет два оператора SELECT:
Оператор IF без оператора ELSE
В SQL можно использовать оператор IF без части ELSE, поскольку часть ELSE является необязательной. Например:
DECLARE @Course_ID INT = 2 IF (@Course_ID <=2) Select * from Guru99 where Tutorial_ID = 1
Выводится следующая единственная строка:
Выполнение условия «ложь» не дает никакого результата. Рассмотрим следующий запрос:
DECLARE @Course_ID INT = 2 IF (@Course_ID <=0) Select * from Guru99 where Tutorial_ID = 1
Результат пустой, как показано ниже:
Вложенные операторы IF…ELSE
В отличие от некоторых других языки программированияВ SQL Server нет оператора ELSE IF внутри условия IF…ELSE. Вместо этого можно вложить один оператор IF…ELSE в другой, как показано ниже:
DECLARE @age INT; SET @age = 60; IF @age < 18 PRINT 'underage'; ELSE BEGIN IF @age < 50 PRINT 'You are below 50'; ELSE PRINT 'Senior'; END;
При значении @age, равном 60, вложенный оператор IF…ELSE выводит следующий результат:
- Если значение переменной @age меньше 18, код выводит 'underage'.
- В противном случае выполняется часть ELSE. Часть ELSE содержит вложенный оператор IF…ELSE.
- Если значение @age меньше 50, код выводит «Вам меньше 50». Если ни одно из этих условий не выполняется, код выводит «Senior».











