Оператор умови SQL Server IF…ELSE: приклад вибору в T-SQL

⚡ Розумний підсумок

IF…ELSE — це оператор керування потоком у SQL Server, який виконує один блок T-SQL, коли булева умова отримує значення true, та необов'язковий альтернативний блок, коли та сама умова отримує значення false.

  • 🧭 Умовна логіка: Умовні оператори дозволяють SQL Server виконувати різні дії T-SQL залежно від того, чи є умова істинною, чи хибною.
  • ✅ Гілки IF та ELSE: Коли булева умова істинна, виконується блок IF; коли вона хибна, виконується необов'язковий блок ELSE.
  • 🔢 Булев вираз: Умова має бути логічним виразом, який має значення true або false, наприклад (1=1) або порівнянням змінних.
  • 🧱 Блоки BEGIN…END: Гілка, яка виконує більше одного оператора, повинна розміщувати ці оператори між ключовими словами BEGIN та END.
  • ➖ ІНАКШЕ необов'язково: Оператор IF може існувати самостійно без частини ELSE, тому хибна умова просто не виробляє жодної дії.
  • 🔁 Вкладені умови: SQL Server не має ключового слова ELSE IF, тому ви вкладаєте один IF…ELSE в інший, щоб перевірити кілька порогів.

Оператор умови SQL Server IF…ELSE з прикладами запитів 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:

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

  • Якщо умова має значення True, то виконуються оператори T-SQL, що йдуть після умови IF у SQL Server.
  • Якщо умова має значення False (Хибність), то виконуються оператори T-SQL, що йдуть після ключового слова ELSE.
  • Після виконання операторів IF T-SQL або 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 T-SQL.
  • ELSE необов’язковий.

ЯКЩО…ІНАКШЕ лише з числовим значенням у логічному виразі

У цьому першому прикладі логічний вираз використовує лише числові значення. Розглянемо наведену нижче умову, яка завжди істинна, оскільки 1 дорівнює 1.

Умова: ІСТИНА

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

Виконання запиту з умовою true (1=1) виводить повідомлення про перехід IF:

Результат true числової умови IF, що виводить повідомлення IF STATEMENT

Умова: НЕПРАВДА

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

З умовою false (1=2) виконується гілка ELSE:

Результат виконання числової умови IF, що помилково, виводить повідомлення ELSE STAGEM

Припустимо, що у вас є таблиця з назвою 'Guru99' з двома стовпцями та чотирма рядками, як показано нижче. Ми використовуватимемо це'Guru99-футова таблиця у наступних прикладах.

Зразок GuruТаблиця 99, що містить стовпець Tutorial_ID та чотири рядки даних

ЯКЩО…ІНАКШЕ зі змінною в булевому виразі

Замість постійних чисел, логічний вираз може порівнювати зміннаУ наступному прикладі оголошується цілочисельна змінна та перевіряється її значення.

Умова: ІСТИНА

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

Коли гілка має виконати більше одного оператора, оберніть оператори в блок 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

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

DECLARE @Course_ID INT = 2

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

Він друкує наступний один рядок:

Результат одного рядка, виведений оператором IF, який не має частини ELSE

Виконання умови false не дає жодного результату. Розглянемо наступний запит:

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 of 60 вкладена оператор IF…ELSE виводить наступний результат:

Результат вкладеної операції IF…ELSE виводить значення Senior для віку 60 років.

  • Код виводить «underage», якщо значення @age менше 18.
  • Якщо ні, виконується частина ELSE. Частина ELSE містить вкладений оператор IF…ELSE.
  • Якщо значення @age менше 50, виводиться «Вам менше 50». Якщо жодна з цих умов не виконується, код виводить «Старший».

Поширені запитання

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, пропонують відсутні гілки та позначають умови, які ніколи не можуть бути істинними. Розробник перевіряє кожну пропозицію на правильність перед її розгортанням.

Підсумуйте цей пост за допомогою: