Az SQL HAVING záradék használata (Adatbázis-lekérdezések utasításai példákkal)

Ebben a leckében az SQL HAVING kerül bemutatásra, amely elsőre nagymértékben hasonlít a WHERE záradékra, de bemutatjuk, hogy miben különböznek egymástól, illetve azt is, hogy melyiket mikor érdemes használni.

SQL alapok kezdőknek, SQL ismeretek kurzus borítókép

Az SQL HAVING záradék használata (Adatbázis-lekérdezések utasításai példákkal)

Ebben a leckében az SQL HAVING kerül bemutatásra, amely elsőre nagymértékben hasonlít a WHERE záradékra, de bemutatjuk, hogy miben különböznek egymástól, illetve azt is, hogy melyiket mikor érdemes használni.

SQL HAVING

Az SQL HAVING segítségével a GROUP BY záradékkal ellátott lekérdezések által visszaadott eredményhalmazt tudjuk továbbszűrni. Továbbá a HAVING záradék esetében megadhatóak a feltételben aggregáló függvények is, míg ezt a WHERE esetében nem tehetnénk meg.

HAVING vagy WHERE? Mikor melyiket kell használni?

HAVING-et vagy WHERE-t használjak? Mikor melyiket érdemes használni? Mind a kettő gyakran felmerülő kérdés, ezekre próbálunk most meg választ adni.

A WHERE záradék segítségével feltételeket határozhatunk meg az egyes rekordokra vonatkozólag, de az aggregáló függvényekre nem. Azonban a HAVING segítségével szabhatunk meg feltételeket az aggregáló függvényekre vonatkozólag. A HAVING-et használhatjuk egy második feltételként is, amellyel a már szűrt adatok még tovább tudjuk szűrni.

Általánosságban kijelenthetjük, hogy a WHERE záradékot a GROUP BY előtt, a HAVING utasítást pedig a GROUP BY után kell használni, azaz, ha a szűrési feltételeket megtudjuk fogalmazni úgy, hogy nem szükséges hozzá csoportosítás, akkor a WHERE-t kell használnunk, azonban, ha olyan adatokon szeretnénk szűréseket végezni, amelyekhez az a rekordok csoportosítására van szükség vagy aggregáló függvényeket használnánk a feltételben, akkor a HAVING-et kell használnunk,

Az SQL HAVING szintaxisa

SELECT oszlop(ok)
FROM tábla
WHERE feltétel(ek)
GROUP BY oszlop(ok)
HAVING feltétel(ek);
Code language: SQL (Structured Query Language) (sql)

A fent említett záradékok egy része el is hagyható, a WHERE használata nem kötelező, sőt még a GROUP BY utasítás sem, de a HAVING-nek úgy van igazán értelme, ha egy csoportosított (GROUP BY) eredményhalmazon használjuk. Szintaktika alapján ugyanúgy néz ki, mint a WHERE: a HAVING kulcsszó után meghatározzuk azokat a feltételeket, amelyeket szeretnénk, ha teljesülnének a rekordokra vonatkozólag. Csak azok a rekordok jelennek meg a végső eredményhalmazban, amelyekre teljesülnek a HAVING-ben meghatározott feltételek.

Példa SQL HAVING használatra

vasarlasok tábla

vasarlasIDvasarloIDtermekdarab
11laptop1
25telefon2
32TV1
42egér5

SQL lekérdezés

SELECT vasarloID
FROM vasarlasok
GROUP BY vasarloID
HAVING COUNT(vasarloID)>1;
Code language: SQL (Structured Query Language) (sql)

Eredmény

vasarloID
2

Ebben a példában kilistázzuk a visszatérő vásárlókat, azaz azokat, akik egynél többször vásároltak a webshopunkból.

Először is csoportosítjuk a vásárlókat a vasarloID alapján, majd az eredményt még megszűrjük egy HAVING-el, amelyben megszabjuk, hogy csak azokat listázza ki, amely esetekben a COUNT függvény egynél nagyobb értékkel tér vissza.

Ha hasznos volt számodra, akkor kérlek oszd meg másokkal is, hogy ezzel támogass minket!