Условное выражение IF…ELSE в SQL Server: пример запроса SELECT на T-SQL.

⚡ Умное резюме

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

  • 🧭 Условная логика: Условные операторы позволяют SQL Server выполнять различные действия T-SQL в зависимости от того, истинно или ложно условие.
  • Ветви IF и ELSE: Если логическое условие истинно, выполняется блок IF; если ложно, вместо него выполняется необязательный блок ELSE.
  • 🔢 Логическое выражение: Условие должно представлять собой логическое выражение, которое принимает значения true или false, например (1=1), или сравнение переменных.
  • 🧱 Блоки НАЧАЛО…КОНЕЦ: Ветвь, выполняющая более одного оператора, должна заключить эти операторы между ключевыми словами BEGIN и END.
  • ELSE — необязательный параметр: Оператор IF может существовать самостоятельно, без части ELSE, поэтому ложное условие просто не приводит к какому-либо действию.
  • 🔁 Вложенные условия: В SQL Server нет ключевого слова ELSE IF, поэтому для проверки нескольких пороговых значений приходится вкладывать один оператор IF…ELSE в другой.

Примеры использования оператора IF…ELSE в SQL Server с запросами SELECT на 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:

Блок-схема работы оператора IF…ELSE в SQL Server, показывающая истинную ветвь IF и ложную ветвь ELSE.

  • Если условие оценивается как истинное, то выполняются операторы 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 выводит сообщение IF STATEMENT.

Условие: ЛОЖЬ

IF (1=2)
PRINT 'IF STATEMENT: CONDITION IS TRUE'
ELSE
PRINT 'ELSE STATEMENT: CONDITION IS FALSE'

При ложном условии (1=2) выполняется ветвь ELSE:

Результатом ложного числового условия IF является вывод сообщения ELSE STATEMENT.

Предположим, у вас есть таблица с именем 'Guru'99' с двумя столбцами и четырьмя строками, как показано ниже. Мы будем использовать этот 'GuruТаблица 99 приведена в следующих примерах.

Образец GuruТаблица 99, содержащая столбец Tutorial_ID и четыре строки данных.

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:

Результат запроса возвращает строку 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:

Результат запроса из ветки 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:

Результат выполнения блока IF двух операторов SELECT для Tutorial_ID 1 и 2.

Условие: ЛОЖЬ

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:

Результат выполнения блока ELSE двух операторов SELECT для Tutorial_ID 3 и 4.

Оператор IF без оператора ELSE

В SQL можно использовать оператор IF без части ELSE, поскольку часть ELSE является необязательной. Например:

DECLARE @Course_ID INT = 2

IF (@Course_ID <=2)
	Select * from Guru99 where Tutorial_ID = 1

Выводится следующая единственная строка:

Результат, отображаемый в одной строке оператором IF, не содержащим части ELSE.

Выполнение условия «ложь» не дает никакого результата. Рассмотрим следующий запрос:

DECLARE @Course_ID INT = 2

IF (@Course_ID <=0)
	Select * from Guru99 where Tutorial_ID = 1

Результат пустой, как показано ниже:

Пустой набор результатов создается, когда условие IF без ELSE ложно.

Вложенные операторы 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 выводит следующий результат:

Результат вложенного оператора IF…ELSE при печати текста "Пожилой человек" в возрасте 60 лет.

  • Если значение переменной @age меньше 18, код выводит 'underage'.
  • В противном случае выполняется часть ELSE. Часть ELSE содержит вложенный оператор IF…ELSE.
  • Если значение @age меньше 50, код выводит «Вам меньше 50». Если ни одно из этих условий не выполняется, код выводит «Senior».

Часто задаваемые вопросы (FAQ)

Оператор IF…ELSE управляет потоком выполнения, выбирая, какие операторы или блоки T-SQL следует выполнить. Оператор CASE — это выражение, которое возвращает одно значение внутри запроса, например, в предложении SELECT или WHERE. Оператор CASE не может выполнять отдельные операторы.

Функция IIF() — это сокращение для выражения CASE, а не для оператора управления потоком выполнения IF…ELSE. Она возвращает одно из двух значений в зависимости от логической проверки и используется внутри запросов. В отличие от IF…ELSE, функция IIF() не может выполнять отдельные операторы или блоки T-SQL.

Нет. Оператор IF…ELSE является оператором управления потоком выполнения, поэтому он не может использоваться внутри списка SELECT или предложения WHERE. Для возврата условных значений в запросе используйте вместо этого выражение CASE или функцию IIF().

Напишите оператор IF EXISTS (SELECT 1 FROM table WHERE condition), за которым следует оператор для выполнения. Оператор EXISTS возвращает true, если подзапрос находит хотя бы одну соответствующую строку, поэтому ветвь IF выполняется только тогда, когда данные существуют.

Да. Конструкция IF…ELSE используется внутри хранимых процедур, триггеров, функций и пакетов для ветвления логики. В сочетании с блоками BEGIN…END она позволяет процедуре выполнять различные SQL-запросы в зависимости от параметров или результатов запроса.

Оператор IF…ELSE оценивает условие один раз и выполняет соответствующую ветку один раз. Цикл WHILE повторяет свой блок операторов до тех пор, пока условие остается истинным. Используйте IF…ELSE для ветвления и WHILE для итерации.

Да. Второй пилот GitHub Можно создавать блоки IF…ELSE, обертки BEGIN…END и вложенные условия на основе запроса на естественном языке. Всегда проверяйте сгенерированные логические условия и логику ветвлений перед запуском скрипта в вашей базе данных.

Искусственный интеллект и помощники на основе машинного обучения переводят простые правила на английском языке в логику IF…ELSE или CASE, предлагают недостающие ветви и отмечают условия, которые никогда не могут быть истинными. Разработчик проверяет каждое предложение на корректность перед его развертыванием.

Подведем итог этой публикации следующим образом: