Instrucțiune condițională IF…ELSE în SQL Server: Exemplu de selecție T-SQL

⚡ Rezumat inteligent

IF…ELSE este o instrucțiune de control al fluxului în SQL Server care rulează un bloc de T-SQL atunci când o condiție booleană se evaluează ca adevărată și un bloc alternativ opțional atunci când aceeași condiție se evaluează ca falsă.

  • 🧭 Logica condiționată: Instrucțiunile condiționale permit SQL Server să execute diferite acțiuni T-SQL în funcție de dacă o condiție este adevărată sau falsă.
  • ✅ Ramurile IF și ELSE: Când condiția booleană este adevărată, blocul IF rulează; când este falsă, blocul opțional ELSE rulează în schimb.
  • 🔢 Expresie booleană: Condiția trebuie să fie o expresie booleană care se evaluează ca adevărată sau falsă, cum ar fi (1=1) sau o comparație de variabile.
  • 🧱 Blocuri BEGIN…END: O ramură care rulează mai multe instrucțiuni trebuie să încapsuleze aceste instrucțiuni între cuvintele cheie BEGIN și END.
  • ➖ ALTFEL este opțional: O instrucțiune IF poate funcționa singură fără o parte ELSE, deci o condiție falsă pur și simplu nu produce nicio acțiune.
  • 🔁 Condiții imbricate: SQL Server nu are cuvântul cheie ELSE IF, așa că imbricați un IF…ELSE în interiorul altuia pentru a testa mai multe praguri.

Instrucțiune condițională IF…ELSE în SQL Server cu exemple de interogări SELECT T-SQL

De ce aveți nevoie de declarații condiționale?

Instrucțiunile condiționale din SQL Server vă ajută să definiți logică și acțiuni diferite pentru condiții diferite. Acestea vă permit să efectuați diferite acțiuni pe baza condițiilor definite în instrucțiune. În viața reală, efectuați multe acțiuni care depind de rezultatul unei alte activități sau situații.

Câteva exemple în timp real de instrucțiuni condiționale sunt:

  • Dacă plouă mâine, voi planifica o excursie cu mașina.
  • Dacă biletele de avion din orașul meu costă mai puțin de 400 de dolari, atunci voi merge în vacanță în Europa; altfel, voi prefera un loc turistic din apropiere.

Aici, puteți vedea că o acțiune, precum călătoria rutieră de mai sus, depinde condiționat de rezultatul unei alte activități, care este „dacă va ploua sau nu mâine”. În mod similar, MS SQL Server oferă, de asemenea, capacitatea de a executa o instrucțiune T-SQL condiționat.

Instrucțiunea IF…ELSE în SQL Server

În MS SQL, IF…ELSE este un tip de instrucțiune condițională. Orice instrucțiune T-SQL poate fi executată condiționat folosind IF…ELSE. Figura de mai jos explică modul în care funcționează ramurile IF și ELSE în SQL Server:

Diagramă de flux a SQL Server IF…ELSE care arată ramura IF adevărată și ramura ELSE falsă

  • Dacă condiția are valoarea True, atunci se execută instrucțiunile T-SQL care urmează condiției IF în SQL Server.
  • Dacă condiția se evaluează ca False, atunci se execută instrucțiunile T-SQL care urmează cuvântului cheie ELSE.
  • Odată ce instrucțiunile IF T-SQL sau instrucțiunea ELSE T-SQL sunt executate, celelalte instrucțiuni T-SQL necondiționate continuă execuția.

Sintaxa și regulile IF…ELSE în SQL

Sintaxă:

IF <Condition>
     {Statement | Block_of_statement}   
[ ELSE   
     {Statement | Block_of_statement}]

reguli:

  • Condiția ar trebui să fie o expresie booleană, adică, condiția ar trebui să aibă ca rezultat o valoare booleană atunci când este evaluată.
  • O instrucțiune IF…ELSE în SQL poate gestiona condiționat o singură instrucțiune T-SQL sau un bloc de instrucțiuni T-SQL.
  • Un bloc de instrucțiuni ar trebui să înceapă cu cuvântul cheie BEGIN și să se încheie cu cuvântul cheie END.
  • Utilizarea BEGIN și END ajută SQL Server să identifice blocul de instrucțiuni care trebuie executat și să îl separe de restul instrucțiunilor T-SQL care nu fac parte din blocul T-SQL IF…ELSE.
  • ELSE este opțional.

IF…ELSE cu doar o valoare numerică într-o expresie booleană

În acest prim exemplu, expresia booleană folosește doar valori numerice. Luați în considerare condiția de mai jos, care este întotdeauna adevărată deoarece 1 este egal cu 1.

Stare: ADEVĂRAT

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

Rularea interogării cu condiția adevărată (1=1) afișează mesajul ramificației IF:

Rezultatul condiției numerice IF adevărate care afișează mesajul IF STATEMENT

Stare: FALS

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

Cu condiția falsă (1=2), ramura ELSE rulează în schimb:

Rezultatul condiției numerice false IF care afișează mesajul ELSE STATEMENT

Să presupunem că aveți un tabel numit „Guru99' cu două coloane și patru rânduri, așa cum se arată mai jos. Vom folosi acest 'GuruTabelul 99' din exemplele care urmează.

Eşantion Guru99 tabel care conține o coloană Tutorial_ID și patru rânduri de date

IF…ELSE cu o variabilă într-o expresie booleană

În loc de numere constante, expresia booleană poate compara o variabilUrmătorul exemplu declară o variabilă întreagă și îi testează valoarea.

Stare: ADEVĂRAT

DECLARE @Course_ID INT = 4

IF (@Course_ID = 4)
Select * from Guru99 where Tutorial_ID = 4
ELSE
Select * from Guru99 where Tutorial_ID != 4

Deoarece @Course_ID este egal cu 4, ramura IF rulează și returnează rândul unde Tutorial_ID este 4:

Rezultatul interogării care returnează rândul Tutorial_ID 4 atunci când condiția variabilei este adevărată

Stare: FALS

DECLARE @Course_ID INT = 4

IF (@Course_ID != 4)
Select * from Guru99 where Tutorial_ID = 4
ELSE
Select * from Guru99 where Tutorial_ID != 4

Aici condiția este falsă, deci ramura ELSE rulează și returnează fiecare rând unde Tutorial_ID nu este 4:

Rezultatul interogării de la ramura ELSE care returnează toate rândurile, cu excepția Tutorial_ID 4

IF…ELSE cu BEGIN…END

Când o ramură trebuie să execute mai multe instrucțiuni, acestea trebuie încadrate într-un bloc BEGIN…END. Exemplul de mai jos execută două instrucțiuni SELECT în fiecare ramură.

Stare: ADEVĂRAT

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

Deoarece @Course_ID este mai mic sau egal cu 2, blocul IF rulează ambele instrucțiuni SELECT din interiorul BEGIN…END:

Rezultatul rulării a două instrucțiuni SELECT în blocul IF pentru Tutorial_ID 1 și 2

Stare: FALS

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

De data aceasta condiția este falsă, așadar blocul ELSE execută cele două instrucțiuni SELECT ale sale:

Rezultatul blocului ELSE care execută două instrucțiuni SELECT pentru Tutorial_ID 3 și 4

Instrucțiune IF fără ELSE

Puteți utiliza o instrucțiune IF în SQL fără o parte ELSE, deoarece partea ELSE este opțională. De exemplu:

DECLARE @Course_ID INT = 2

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

Imprimă următorul rând unic:

Rezultat pe un singur rând afișat de o instrucțiune IF care nu are parte ELSE

Executarea condiției false nu dă niciun rezultat. Luați în considerare următoarea interogare:

DECLARE @Course_ID INT = 2

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

Rezultatul este gol, așa cum se arată mai jos:

Set de rezultate gol produs când condiția IF fără ELSE este falsă

Instrucțiuni IF…ELSE imbricate

Spre deosebire de unele altele limbaje de programare, SQL Server nu oferă o instrucțiune ELSE IF în interiorul unei condiții IF…ELSE. În schimb, puteți imbrica o instrucțiune IF…ELSE în interiorul alteia, așa cum se demonstrează mai jos:

 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;

Pentru o vârstă de 60 de ani, funcția imbricată IF…ELSE afișează următorul rezultat:

Rezultatul afișării imbricate IF…ELSE a valorii Senior pentru o vârstă de 60 de ani

  • Codul afișează „underage” dacă valoarea lui @age este sub 18 ani.
  • Dacă nu, se execută partea ELSE. Partea ELSE conține un IF…ELSE imbricat.
  • Dacă valoarea lui @age este sub 50, aceasta afișează „Aveți sub 50 de ani”. Dacă niciuna dintre aceste condiții nu este adevărată, codul afișează „Senior”.

Întrebări frecvente

IF…ELSE controlează fluxul de execuție, alegând ce instrucțiuni sau blocuri T-SQL să ruleze. CASE este o expresie care returnează o singură valoare în interiorul unei interogări, cum ar fi într-o clauză SELECT sau WHERE. CASE nu poate rula instrucțiuni separate.

IIF() este o prescurtare pentru o expresie CASE, nu instrucțiunea de control al fluxului IF…ELSE. Returnează una dintre cele două valori pe baza unui test boolean și este utilizată în interogări. Spre deosebire de IF…ELSE, IIF() nu poate executa instrucțiuni sau blocuri T-SQL separate.

Nu. IF…ELSE este o instrucțiune de control al fluxului, deci nu poate apărea într-o listă SELECT sau într-o clauză WHERE. Pentru a returna valori condiționale într-o interogare, utilizați în schimb o expresie CASE sau funcția IIF().

Scrieți IF EXISTS (SELECT 1 FROM table WHERE condition) urmată de instrucțiunea de executat. EXISTS returnează true când subinterogarea găsește cel puțin un rând potrivit, astfel încât ramura IF se execută numai atunci când datele există.

Da. IF…ELSE este utilizată în cadrul procedurilor stocate, declanșatoarelor, funcțiilor și batch-urilor pentru ramificarea logicii. Combinată cu blocurile BEGIN…END, permite unei proceduri să execute diferite instrucțiuni SQL în funcție de parametri sau de rezultatele interogării.

IF…ELSE își evaluează condiția o singură dată și rulează ramura corespunzătoare o singură dată. O buclă WHILE repetă blocul său de instrucțiuni atâta timp cât condiția rămâne adevărată. Folosiți IF…ELSE pentru ramificare și WHILE pentru iterație.

Da. Copilotul GitHub poate redacta blocuri IF…ELSE, wrapper-e BEGIN…END și condiții imbricate dintr-un prompt în limbaj natural. Verificați întotdeauna condițiile booleene generate și logica de ramificare înainte de a rula scriptul în baza de date.

Asistenții de inteligență artificială și învățare automată traduc regulile simple în logică IF…ELSE sau CASE, sugerează ramificații lipsă și semnalează condiții care nu pot fi niciodată adevărate. Dezvoltatorul verifică fiecare sugestie pentru a o verifica corectitudinea înainte de a o implementa.

Rezumați această postare cu: