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.

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:
- 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:
Á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:
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.
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:
Á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:
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:
Á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:
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:
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ó:
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 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”.











