Bevezetés az SQL rendelkezésébe
Az a legfontosabb kérdés, amelyre jut az a gondolat, hogy mi ez a rendelkezés? Nos, a HAVING záradékot használjuk az SQL lekérdezés eredményeinek kiszűrésére aggregált függvényekkel. A sima angol nyelvű megértés érdekében parancsolja az SQL elemzőt: „Hé SQL, az Ügyféladat-táblázatból hozzon le nekem azon országok nevét, amelyek több mint egymillió ügyfelével rendelkeznek”.
Várj, ez az, amit a záradék tesz, nem igaz? Igen, ez nagyon hasonlít a WHERE záradék működésére, ám enyhe különbséggel. A WHERE záradék nem működik az összesített funkciókkal.
Most, hogy csak egy kis összegzést nyújtsunk az összesített függvényekről, ezek olyan funkciók, amelyek több sort vesznek bemenetként, és jelentősen feldolgozott outputot adnak. Néhány példa a Count (), Sum (), Min (), Max (), Avg () etc.
Miért van, és hol nem?
Látjuk, hogy a HAVING és WHERE záradékok nagyon hasonló feladatot végeznek az eredmények kiszűrésére. Akkor mi volt szüksége a HAVING záradékra? Miért nem lehetne használni a WHERE záradékot összesített funkciókkal?
Ennek megválaszolásához meg kell értenünk, hogy az SQL motor hogyan kezeli a két záradékot. Minden SQL parancs FROM-záradéka megmondja a motornak, ahonnan kell olvasni a sorokat. Az adatok a lemezen vannak tárolva, és a memóriába kerülnek feldolgozás céljából. Mivel a sorokat egyenként olvassa le a lemezről a memóriára, ellenőrizni kell őket a WHERE záradék szempontjából. A WHERE záradékot nem teljesítő sorok nem töltődnek be a memóriába. Így a WHERE záradékot minden sorra ki kell értékelni, amikor azokat az SQL motor dolgozza fel.
Éppen ellenkezőleg, a HAVING záradék csak akkor kerül a képbe, ha a sorokat betöltötték a memóriába. A memóriába töltés után az összesített funkciók elvégzik a feladatukat a kívánt feltételt teljesítő sorokon.
Most, ha WHERE záradékot fogalmaznánk meg az összesített függvénnyel, mint például az avg (), akkor ez összetévesztheti az SQL motort abban, hogy bele kell foglalni a sort az átlag kiszámításához. Alapvetően azt a parancsot adnánk a motornak, hogy ne olvassa el a sort, mivel az nem teljesítette a WHERE záradékban található avg () kritériumokat. De hé, annak meghatározásához, hogy teljesült-e vagy sem az avg () számítási kritériumoknak, a sort be kell olvasni a memóriába. A patthelyzet állapota.
A szintaxis
SELECT
FROM
Ügyfél-azonosító | Ügyfél neve | Város | Ország |
1 | Anja Damian | Berlin | Németország |
2 | Denny Cockett | México DF | Mexikó |
3 | Eleanor Calnan | México DF | Mexikó |
4 | Albertha Albury | London | UK |
5 | Latisha Nembhard | Luleå | Svédország |
6 | Madalene Bing | Mannheim | Németország |
7 | Rebecka Beegle | Strasbourg | Franciaország |
8 | Rosy Tippie | Madrid | Spanyolország |
9 | Audie Khan | Marseille | Franciaország |
10 | Hildegard Burrowes | Tsawassen | Kanada |
11 | Cordell Dutremble | London | UK |
12 | Nora Reyna | Buenos Aires | Argentína |
13 | Ursula Laforest | México DF | Mexikó |
14 | Claudie Neel | Bern | Svájc |
15 | Portia Yee | Sao Paulo | Brazília |
16 | Angila Segarra | London | UK |
17 | Lise Wexler | Aachen | Németország |
18 | Ned Mendivil | Nantes | Franciaország |
19 | Sara Vidaurri | London | UK |
20 | Tayna Navin | Graz | Ausztria |
21 | Pura Ray | Sao Paulo | Brazília |
22 | Byard Erika | Madrid | Spanyolország |
23 | Jimmie Luke | Lille | Franciaország |
24 | Shayla Byington | Bräcke | Svédország |
25 | Christiana Boden | München | Németország |
26 | Irina Nitta | Nantes | Franciaország |
27 | Bryanna Alls | Torino | Olaszország |
28 | Norah Picken | Lisboa | Portugália |
29 | Moriah Stwart | Barcelona | Spanyolország |
30 | Idella Harriott | Sevilla | Spanyolország |
Rendelés azonosító | Ügyfél-azonosító | Rendelés dátuma |
10254 | 14 | 1996/11/07 |
10258 | 20 | 17-07-1996 |
10259 | 13 | 18-07-1996 |
10263 | 20 | 23-07-1996 |
10264 | 24 | 24-07-1996 |
10265 | 7 | 25-07-1996 |
10267 | 25 | 29-07-1996 |
10278 | 5 | 1996/12/08 |
10280 | 5 | 14-08-1996 |
10289 | 11 | 26-08-1996 |
10290 | 15 | 27-08-1996 |
10297 | 7 | 1996/04/09 |
10303 | 30 | 1996/11/09 |
10308 | 2 | 18-09-1996 |
10311 | 18 | 20-09-1996 |
10326 | 8 | 1996/10/10 |
10327 | 24 | 1996/11/10 |
10328 | 28 | 14-10-1996 |
10331 | 9 | 16-10-1996 |
10337 | 25 | 24-10-1996 |
10340 | 9 | 29-10-1996 |
10342 | 25 | 30-10-1996 |
10347 | 21 | 1996/06/11 |
10351 | 20 | 1996/11/11 |
10352 | 28 | 1996/12/11 |
10355 | 4 | 15-11-1996 |
10360 | 7 | 22-11-1996 |
10362 | 9 | 25-11-1996 |
10363 | 17 | 26-11-1996 |
10364 | 19 | 26-11-1996 |
10365 | 3 | 27-11-1996 |
10366 | 29 | 28-11-1996 |
10368 | 20 | 29-11-1996 |
10370 | 14 | 1996/03/12 |
10378 | 24 | 1996/10/12 |
10382 | 20 | 13-12-1996 |
10383 | 4 | 16-12-1996 |
10384 | 5 | 16-12-1996 |
10386 | 21 | 18-12-1996 |
10389 | 10 | 20-12-1996 |
10390 | 20 | 23-12-1996 |
10391 | 17 | 23-12-1996 |
10396 | 25 | 27-12-1996 |
10400 | 19 | 1997/01/01 |
10402 | 20 | 1997/02/01 |
10403 | 20 | 1997/03/01 |
10408 | 23 | 1997/08/01 |
10410 | 10 | 1997/10/01 |
10411 | 10 | 1997/10/01 |
10414 | 21 | 14-01-1997 |
10422 | 27 | 22-01-1997 |
10426 | 29 | 27-01-1997 |
10430 | 20 | 30-01-1997 |
10431 | 10 | 30-01-1997 |
10434 | 24 | 1997/03/02 |
10435 | 16 | 1997/04/02 |
10436 | 7 | 1997/05/02 |
10442 | 20 | 1997/11/02 |
Most azt szeretnénk tudni, hogy az ügyfelek mely országokban összesen 5 vagy annál több megrendelést tettek velünk. Lehet, hogy egy ügyfél több mint 5 megrendelést tesz, vagy 5 ügyfél egy-egy megrendelést nyújt.
Ennek megvalósításához szükségünk lenne
1. lépés : Csatlakozzon a két asztalhoz
2. lépés: Csoportosítsa az ügyfeleket országuk alapján
3. lépés: Számolja az egyes csoportok megrendeléseinek számát
4. lépés: Szűrje le az eredményeket legalább öt megrendelésre
Fogalmazzuk meg a parancsot:
SELECT C.Country, COUNT(O.OrderId) as NumberOfOrders -- Step 1, 3
FROM Customers C -- Step 1
INNER JOIN Orders O on C.CustomerID = O.CustomerID -- Step 1
GROUP BY C.Country -- Step 2
HAVING COUNT(O.OrderId) >= 5 -- Step 4
ORDER BY COUNT(O.OrderId) DESC
Íme az eredmények:
Ország | NumberOfOrders |
Ausztria | 10 |
Franciaország | 9 |
Svédország | 7 |
Németország | 6 |
UK | 6 |
Következtetés - SQL rendelkezés
Így láttuk, mi a HAVING záradék célja és hogyan működik. Fontos megérteni az alapvetõ mûködést, különben összezavarodhat az a kérdés, hogy miért a HAVING záradék nem hozza meg a kívánt eredményeket. Játsszon különféle asztalokkal, csatlakozásokkal és kombinációkkal, a HAVING záradékkal együtt.
Ajánlott cikkek
Ez az útmutató az SQL HAVING záradékához. Itt tárgyaljuk a HAVING záradék működését az SQL-ben és a példát a következő vevőtáblával. Megnézheti más javasolt cikkeinket -
- SQL beszúrási lekérdezés
- Idegen kulcs az SQL-ben
- Megkülönböztető kulcsszó az SQL-ben
- SQL nézetek
- A legnépszerűbb lekérdezési példák az Oracle belső csatlakozásához