Оператор умови SQL Server IF…ELSE: приклад вибору в T-SQL
⚡ Розумний підсумок
IF…ELSE — це оператор керування потоком у SQL Server, який виконує один блок T-SQL, коли булева умова отримує значення true, та необов'язковий альтернативний блок, коли та сама умова отримує значення false.
Навіщо вам потрібні умовні оператори?
Умовні оператори в SQL Server допомагають визначити різну логіку та дії для різних умов. Вони дозволяють виконувати різні дії на основі умов, визначених в операторі. У реальному житті ви виконуєте багато дій, які залежать від результату якоїсь іншої дії чи ситуації.
Деякі приклади умовного оператора в реальному часі:
- Якщо завтра піде дощ, я спланую подорож.
- Якщо авіаквитки з мого міста коштують менше 400 доларів, то я поїду у відпустку до Європи; в іншому випадку я надам перевагу сусідньому туристичному місцю.
Тут ви можете бачити, що одна дія, як-от подорож вище, умовно залежить від результату іншої дії, а саме «чи буде завтра дощ чи ні». Аналогічно, MS SQL Server також надає можливість умовного виконання оператора T-SQL.
Оператор IF…ELSE в SQL Server
У MS SQL IF…ELSE – це тип умовного оператора. Будь-який оператор T-SQL може бути виконаний умовно за допомогою IF…ELSE. На рисунку нижче показано, як працюють гілки IF та ELSE в SQL Server:
- Якщо умова має значення 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:
Умова: НЕПРАВДА
IF (1=2) PRINT 'IF STATEMENT: CONDITION IS TRUE' ELSE PRINT 'ELSE STATEMENT: CONDITION IS FALSE'
З умовою false (1=2) виконується гілка ELSE:
Припустимо, що у вас є таблиця з назвою 'Guru99' з двома стовпцями та чотирма рядками, як показано нижче. Ми використовуватимемо це'Guru99-футова таблиця у наступних прикладах.
ЯКЩО…ІНАКШЕ зі змінною в булевому виразі
Замість постійних чисел, логічний вираз може порівнювати зміннаУ наступному прикладі оголошується цілочисельна змінна та перевіряється її значення.
Умова: ІСТИНА
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
Коли гілка має виконати більше одного оператора, оберніть оператори в блок 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
Ви можете використовувати оператор IF в SQL без частини ELSE, оскільки частина ELSE є необов'язковою. Наприклад:
DECLARE @Course_ID INT = 2 IF (@Course_ID <=2) Select * from Guru99 where Tutorial_ID = 1
Він друкує наступний один рядок:
Виконання умови false не дає жодного результату. Розглянемо наступний запит:
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 of 60 вкладена оператор IF…ELSE виводить наступний результат:
- Код виводить «underage», якщо значення @age менше 18.
- Якщо ні, виконується частина ELSE. Частина ELSE містить вкладений оператор IF…ELSE.
- Якщо значення @age менше 50, виводиться «Вам менше 50». Якщо жодна з цих умов не виконується, код виводить «Старший».












