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ă.
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:
- 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:
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:
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ă.
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:
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:
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:
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:
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:
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:
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:
- 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”.












