2.1 CASE nyilatkozat

Kétféleképpen írhatunk utasításokat SQL-ben CASE. Az első bejegyzés úgy néz ki, mintha a Java nyelvről váltana, míg a második formátum inkább többes szám if-else.

Kezdjük az első opcióval - a kapcsoló analógjával. Az általános formátum a következő:

CASE case_value
	WHEN value1 THEN result1
	[WHEN value2 THEN result2] ...
	[ELSE resultN]
END

Valóban nagyon hasonlít a -hoz switch, csak a szavak különböznek kissé:

SQL Jáva
eset x kapcsoló (x) {
amikor érték eset értéke:
akkor eredmény visszatérési eredmény;
más eredmény alapértelmezett: eredmény visszaadása;
vége }

Fordítsunk le egy példát Java-ból SQL-be:

Jáva SQL
switch (a) {
   case 1: return "one";
   case 2: return "two";
   case 3: return "three";
   default: return "unknown";
}
CASE a
   WHEN 1 THEN 'one'
   WHEN 2 THEN 'two'
   WHEN 3 THEN 'three'
   ELSE 'unknown'
END

2.2 A CASE utasítás második változata

Létezik az operátor második verziója is CASE, amely, mint fentebb említettük, inkább többes szám if-else. Az általános formátum a következő:

CASE
	WHEN condition 1 THEN result1
	[WHEN condition 2 THEN result2] ...
	[ELSE resultN]
END

Itt a feltételeket egyszerűen szekvenciálisan ellenőrizzük, ha bármelyik igaz, akkor a megadott eredmény kerül visszaadásra. Ha egyik feltétel sem teljesül, akkor a -ban megadott érték ELSE.

Fordítsunk le egy példát Java-ból SQL-be:

Jáva SQL
if (a == 3)
	return "three";
CASE
   WHEN a=3 THEN 'three'
END
if (a == 3)
	return "three";
else
	return "zero";
CASE
   WHEN a=3 THEN 'three'
   ELSE 'zero'
END
if (a == 1)
	return "three";
else if (a == 2)
	return "two";
else if (a == 3)
	return "three";
else
	return "zero";
CASE
   WHEN a=1 THEN 'one'
   WHEN a=2 THEN 'two'
   WHEN a=3 THEN 'three'
   ELSE 'zero'
END

2.3 Oldja meg a problémát a CASE utasítás használatával

Írjunk le néhány érdekes kérdést. Ne feledje, volt egy feladatunk – tegyük hozzá a „LEJÁRT” szót! a múltbeli feladatok nevére a feladattáblázatban . Könnyen megtehető a CASE.

A határidő mezőben úgy fog kinézni, mint a nyilatkozat második változatában CASE:


CASE
	WHEN deadline < CURDATE() THEN CONCAT('EXPIRED!', name)
	ELSE name
END
        

Példa egy teljes lekérdezésre az operátor használatával CASE:


SELECT
    id,
    emploee_id,
    CASE WHEN deadline < CURDATE() THEN CONCAT('EXPIRED!', name) ELSE name END AS name,
    deadline         	
FROM task
        

A lekérdezés eredménye a következő lesz:

id employee_id név határidő
1 1 LEJÁRT! Javítson ki egy hibát a kezelőfelületen 2022-06-01
2 2 Javítson ki egy hibát a háttérben 2022-06-15
3 5 Vegyél kávét 2022-07-01
4 5 Vegyél kávét 2022-08-01
5 5 Vegyél kávét 2022-09-01
6 (NULLA) Takarítsd ki az irodát (NULLA)
7 4 Élvezd az életet (NULLA)
8 6 Élvezd az életet (NULLA)