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
vasarlasID | vasarloID | termek | darab |
---|---|---|---|
1 | 1 | laptop | 1 |
2 | 5 | telefon | 2 |
3 | 2 | TV | 1 |
4 | 2 | egér | 5 |
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.