SQL Server IF…ELSE feltételutasítás: T-SQL Select példa

⚡ Okos összefoglaló

Az IF…ELSE egy folyamatvezérlő utasítás az SQL Serverben, amely egy T-SQL blokkot futtat, amikor egy logikai feltétel igaz értéket ad vissza, és egy opcionális alternatív blokkot, amikor ugyanaz a feltétel hamis értéket ad vissza.

  • 🧭 Feltételes logika: A feltételes utasítások lehetővé teszik az SQL Server számára, hogy különböző T-SQL műveleteket futtasson attól függően, hogy egy feltétel igaz vagy hamis-e.
  • IF és ELSE ágak: Amikor a logikai feltétel igaz, az IF blokk fut le; hamis feltétel esetén az opcionális ELSE blokk.
  • 🔢 Logikai kifejezés: A feltételnek egy logikai kifejezésnek kell lennie, amely igaz vagy hamis értéket ad vissza, például (1=1) vagy egy változó-összehasonlítás.
  • 🧱 BEGIN…END blokkok: Egy olyan ágnak, amely egynél több utasítást futtat, ezeket az utasításokat a BEGIN és END kulcsszavak közé kell zárnia.
  • Az ELSE opcionális: Egy HA utasítás önmagában is állhat ELSE rész nélkül, tehát egy hamis feltétel egyszerűen nem eredményez műveletet.
  • 🔁 Beágyazott feltételek: Az SQL Servernek nincs ELSE IF kulcsszava, így egy IF…ELSE kulcsszót egy másikba ágyazva tesztelhetsz több küszöbértéket.

SQL Server IF…ELSE feltételutasítás T-SQL SELECT lekérdezéssel - példák

Miért van szükség feltételes nyilatkozatokra?

Az SQL Server feltételes utasításai segítenek különböző logikák és műveletek definiálásában különböző feltételekhez. Lehetővé teszik, hogy az utasításban definiált feltételek alapján különböző műveleteket hajtsunk végre. A való életben számos olyan műveletet hajtunk végre, amelyek valamilyen más tevékenység vagy helyzet eredményétől függenek.

Néhány valós idejű példa a feltételes utasításokra:

  • Ha holnap esik az eső, akkor betervezek egy kirándulást.
  • Ha a repülőjegyek a városomból 400 dollárnál olcsóbbak, akkor Európában fogok nyaralni; egyébként egy közeli turisztikai helyet részesítek előnyben.

Itt látható, hogy egy cselekvés, mint például a fenti autós kirándulás, feltételesen függ egy másik tevékenység eredményétől, ami az, hogy „esik-e az eső holnap vagy sem”. Hasonlóképpen, MS SQL Server lehetővé teszi a T-SQL utasítások feltételes végrehajtását is.

IF…ELSE utasítás az SQL Serverben

Az MS SQL-ben az IF…ELSE egy feltételes utasítástípus. Bármely T-SQL utasítás végrehajtható feltételesen az IF…ELSE használatával. Az alábbi ábra bemutatja, hogyan működnek az IF és ELSE ágak az SQL Serverben:

Az SQL Server IF…ELSE folyamatábrája, amely az igaz IF és a hamis ELSE ágat mutatja

  • Ha a feltétel értéke igaz, akkor a rendszer végrehajtja az SQL Serverben az IF feltételt követő T-SQL utasításokat.
  • Ha a feltétel hamis értéket ad vissza, akkor az ELSE kulcsszót követő T-SQL utasítások végrehajtásra kerülnek.
  • Miután az IF T-SQL vagy az ELSE T-SQL utasítás végrehajtásra került, a többi feltétel nélküli T-SQL utasítás végrehajtása folytatódik.

HA…ELSE szintaxis és szabályok SQL-ben

Syntax:

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

Szabályok:

  • A feltételnek logikai kifejezésnek kell lennie, azaz a feltétel kiértékelésekor logikai értéket eredményez.
  • Az SQL-ben egy IF…ELSE utasítás feltételesen képes kezelni egyetlen T-SQL utasítást vagy T-SQL utasítások egy blokkját.
  • Egy utasításblokknak a BEGIN kulcsszóval kell kezdődnie és az END kulcsszóval kell zárulnia.
  • A BEGIN és END utasítások használata segít az SQL Servernek azonosítani a végrehajtandó utasításblokkot, és elkülöníteni azt a többi T-SQL utasítástól, amelyek nem részei az IF…ELSE T-SQL blokknak.
  • Az ELSE nem kötelező.

HA…KÜLÖNBEN csak numerikus értékkel logikai kifejezésben

Ebben az első példában a logikai kifejezés csak numerikus értékeket használ. Tekintsük az alábbi feltételt, amely mindig igaz, mivel 1 egyenlő 1-gyel.

Állapot: IGAZ

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

A lekérdezés futtatása az igaz feltétellel (1=1) kinyomtatja az IF elágazási üzenetet:

Az igaz numerikus HA feltétel eredménye, amely kinyomtatja az HA KUTATÁS üzenetet

Állapot: HAMIS

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

A hamis feltétellel (1=2) az ELSE ág fut le helyette:

A hamis numerikus IF feltétel eredménye, amely kinyomtatja az ELSE utasítást

Tegyük fel, hogy van egy ' nevű tábládGuru99' két oszloppal és négy sorral, ahogy az alább látható. Ezt fogjuk használni:Guru99 lábas asztal a következő példákban.

Minta Guru99 tábla, amely egy Tutorial_ID oszlopot és négy adatsort tartalmaz

HA…KÜLÖNBEN változóval logikai kifejezésben

Konstans számok helyett a Boole-kifejezés összehasonlíthat egy változóA következő példa egy egész változót deklarál és teszteli az értékét.

Állapot: IGAZ

DECLARE @Course_ID INT = 4

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

Mivel a @Course_ID értéke 4, az IF ág lefut, és visszaadja azt a sort, ahol a Tutorial_ID értéke 4:

A lekérdezés eredménye a Tutorial_ID 4 sort adja vissza, ha a változó feltétele igaz.

Állapot: HAMIS

DECLARE @Course_ID INT = 4

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

Itt a feltétel hamis, ezért az ELSE ág lefut, és minden olyan sort visszaad, ahol a Tutorial_ID nem 4:

Az ELSE ág lekérdezési eredménye, amely a Tutorial_ID 4 kivételével az összes sort visszaadja.

HA…KÜLÖNBEN, BEGIN…END-tel

Ha egy ágnak egynél több utasítást kell futtatnia, akkor az utasításokat egy BEGIN…END blokkba kell zárni. Az alábbi példa két SELECT utasítást futtat minden ágban.

Állapot: IGAZ

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

Mivel a @Course_ID kisebb vagy egyenlő, mint 2, az IF blokk mindkét SELECT utasítást lefuttatja a BEGIN…END blokkon belül:

Az IF blokk eredménye, amely két SELECT utasítást futtat a Tutorial_ID 1 és 2 esetében

Állapot: HAMIS

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

Ezúttal a feltétel hamis, így az ELSE blokk végrehajtja a két SELECT utasítását:

Az ELSE blokk eredménye, amely két SELECT utasítást futtat a Tutorial_ID 3 és 4 esetében

IF utasítás ELSE nélkül

Az SQL-ben az IF utasítás használható ELSE rész nélkül is, mivel az ELSE rész opcionális. Például:

DECLARE @Course_ID INT = 2

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

A következő egyetlen sort nyomtatja ki:

Egysoros eredmény, amelyet egy ELSE rész nélküli IF utasítás nyomtat ki

A hamis feltétel végrehajtása nem ad kimenetet. Tekintsük a következő lekérdezést:

DECLARE @Course_ID INT = 2

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

Az eredmény üres, ahogy az alább látható:

Üres eredményhalmaz keletkezik, ha az IF feltétel ELSE nélkül hamis

Beágyazott IF…ELSE utasítások

Néhánytól eltérően programozási nyelvekAz SQL Server nem biztosít ELSE IF utasítást egy IF…ELSE feltételen belül. Ehelyett egy IF…ELSE feltételt beágyazhat egy másikba, ahogy az alább látható:

 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;

Egy 60 éves korosztály esetében a beágyazott IF…ELSE függvény a következő eredményt írja ki:

A beágyazott IF…ELSE függvény eredménye, amely Senior értéket ír ki 60 éves kor esetén

  • A kód „underage” értéket ír ki, ha az @age értéke 18 év alatti.
  • Ha nem, akkor az ELSE rész hajtódik végre. Az ELSE rész egy beágyazott IF…ELSE függvényt tartalmaz.
  • Ha az @age értéke 50 alatt van, akkor a kód a következőt írja ki: „Ön 50 év alatt van”. Ha egyik feltétel sem teljesül, akkor a kód a következőt írja ki: „Idősebb”.

GYIK

Az IF…ELSE utasítás vezérli a végrehajtás folyamatát, kiválasztva, hogy mely T-SQL utasításokat vagy blokkokat kell futtatni. A CASE egy olyan kifejezés, amely egyetlen értéket ad vissza egy lekérdezésen belül, például egy SELECT vagy WHERE záradékban. A CASE nem tud külön utasításokat futtatni.

Az IIF() a CASE kifejezés rövidítése, nem pedig az IF…ELSE folyamatvezérlő utasítás. Logikai teszt alapján két érték egyikét adja vissza, és lekérdezéseken belül használatos. Az IF…ELSE-szel ellentétben az IIF() nem tud különálló T-SQL utasításokat vagy blokkokat végrehajtani.

Nem. Az IF…ELSE egy folyamatirányítási utasítás, ezért nem szerepelhet SELECT listában vagy WHERE záradékban. Feltételes értékek visszaadásához lekérdezésen belül CASE kifejezést vagy az IIF() függvényt kell használni.

Írd ki az IF EXISTS (SELECT 1 FROM table WHERE feltétel) utasítást, majd a futtatni kívánt utasítást. Az EXISTS igaz értéket ad vissza, ha az alkérés legalább egy egyező sort talál, így az IF ág csak akkor fut le, ha az adat létezik.

Igen. Az IF…ELSE blokkot tárolt eljárásokban, triggerekben, függvényekben és kötegelt elágazási logikában használják. A BEGIN…END blokkokkal kombinálva lehetővé teszi, hogy egy eljárás különböző SQL utasításokat futtasson a paraméterektől vagy a lekérdezés eredményeitől függően.

Az IF…ELSE egyszer kiértékeli a feltételét, és egyetlen alkalommal lefuttatja a megfelelő ágat. Egy WHILE ciklus mindaddig ismétli az utasításblokkját, amíg a feltétel igaz marad. Az IF…ELSE függvényt elágazáshoz, a WHILE-t pedig iterációhoz használjuk.

Igen. GitHub másodpilóta Természetes nyelvű promptból IF…ELSE blokkokat, BEGIN…END burkolókat és beágyazott feltételeket is létrehozhat. A szkript adatbázison való futtatása előtt mindig tekintse át a létrehozott logikai feltételeket és az elágazási logikát.

A mesterséges intelligencia és a gépi tanulást segítő asszisztensek lefordítják az egyszerű angol szabályokat IF…ELSE vagy CASE logikává, hiányzó elágazásokat javasolnak, és megjelölik azokat a feltételeket, amelyek soha nem lehetnek igazak. A fejlesztő minden javaslatot helyesség szempontjából ellenőrz, mielőtt telepítené.

Foglald össze ezt a bejegyzést a következőképpen: