SQL Server IF…ELSE Условен оператор: Пример за T-SQL Select
⚡ Умно обобщение
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. Примерът по-долу изпълнява два 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;
За @възраст 60, вложената инструкция IF…ELSE отпечатва следния резултат:
- Кодът отпечатва „underage“, ако стойността на @age е под 18.
- Ако не, се изпълнява частта ELSE. Частта ELSE съдържа вложена IF…ELSE.
- Ако стойността на @age е под 50, кодът отпечатва „Вие сте под 50“. Ако никое от тези условия не е изпълнено, кодът отпечатва „Senior“.












