SQL Server IF…ELSE Условен оператор: Пример за T-SQL Select

⚡ Умно обобщение

IF…ELSE е оператор за управление на потока в SQL Server, който изпълнява един блок от T-SQL, когато булево условие се оцени като true, и опционален алтернативен блок, когато същото условие се оцени като false.

  • 🧭 Условна логика: Условните оператори позволяват на SQL Server да изпълнява различни T-SQL действия в зависимост от това дали условието е вярно или невярно.
  • ✅ IF и ELSE клонове: Когато булевото условие е истина, се изпълнява блокът IF; когато е неистина, се изпълнява опционалният блок ELSE.
  • 🔢 Булев израз: Условието трябва да е булев израз, който се оценява като истина или неистина, като например (1=1) или сравнение на променливи.
  • 🧱 Блокове BEGIN…END: Клон, който изпълнява повече от един оператор, трябва да обгърне тези оператори между ключовите думи BEGIN и END.
  • ➖ ИНАЧЕ е по избор: IF операторът може да съществува самостоятелно без ELSE частта, така че невярно условие просто не произвежда никакво действие.
  • 🔁 Вложени условия: SQL Server няма ключова дума ELSE IF, така че влагате една IF…ELSE в друга, за да тествате множество прагове.

Примери за условие IF…ELSE в SQL Server с T-SQL SELECT заявка

Защо имате нужда от условни изрази?

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

Резултат от истинското числово IF условие, отпечатващо IF ИЗПОЛЗВАНЕ на съобщението

Състояние: НЕВЯРНО

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

При условието „false“ (1=2), вместо това се изпълнява клонът ELSE:

Резултат от невярното числово IF условие, отпечатващо съобщението ELSE STATEMENT

Да предположим, че имате таблица с име „Guru99' с две колони и четири реда, както е показано по-долу. Ще използваме това 'Guru99' таблица в следващите примери.

Проба Guru99 таблица, съдържаща колона 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. Примерът по-долу изпълнява два 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:

Резултат от изпълнението на два SELECT оператора на блока IF за 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 оператора:

Резултат от изпълнението на два SELECT оператора на блока ELSE за 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;

За @възраст 60, вложената инструкция IF…ELSE отпечатва следния резултат:

Резултатът от вложената команда IF…ELSE, отпечатваща Senior за възраст 60 години

  • Кодът отпечатва „underage“, ако стойността на @age е под 18.
  • Ако не, се изпълнява частта ELSE. Частта ELSE съдържа вложена IF…ELSE.
  • Ако стойността на @age е под 50, кодът отпечатва „Вие сте под 50“. Ако никое от тези условия не е изпълнено, кодът отпечатва „Senior“.

Въпроси и Отговори

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 условие), последвано от оператора, който ще се изпълни. EXISTS връща true, когато подзаявката намери поне един съответстващ ред, така че IF клонът се изпълнява само когато данните съществуват.

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

IF…ELSE оценява условието си веднъж и изпълнява съответстващия разклон веднъж. Цикълът WHILE повтаря блока си с оператори, докато условието остава вярно. Използвайте IF…ELSE за разклоняване и WHILE за итерация.

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

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

Обобщете тази публикация с: