Johdanto SQL-lausekkeeseen
Aivan peruskysymys, joka tulee mieleen, mikä on tämä OMA lauseke? No, HAVING-lauseketta käytetään suodattamaan SQL-kyselyn tulokset aggregoiduilla toiminnoilla. Ymmärtääkseen selkeästi englantia, se käskee SQL-jäsentäjän "Hei SQL, Asiakastiedot-taulukostamme, hakemaan minulle niiden maiden nimet, joilla on yli miljoona asiakasta".
Odota, se mitä WHERE-lause tekee, eikö niin? Kyllä, se on hyvin samanlainen kuin WHERE-lause, mutta pienellä erolla. WHERE-lause ei toimi aggregoitujen toimintojen kanssa.
Nyt vain kertoaksesi vähän aggregaattitoiminnoista, nämä ovat toimintoja, jotka ottavat useita rivejä syötteinä ja antavat merkittävästi käsitellyn tulosteen. Muutamia esimerkkejä ovat Count (), Sum (), Min (), Max (), Avg () jne.
Miksi ottaa ja ei missä?
Näemme, että HAVING- ja WHERE-lausekkeet suorittavat hyvin samanlaisen tehtävän suodattaa tulokset. Mikä sitten oli HAVING-lausekkeen tarve? Miksi WHERE-lauseketta ei voitu käyttää aggregoitujen toimintojen kanssa?
Tähän vastaamiseksi meidän on ymmärrettävä, kuinka SQL-moottori käsittelee näitä kahta lauseketta. Jokaisen SQL-komennon FROM-lause kertoo moottorille mistä rivit luetaan. Tiedot tallennetaan levylle ja haetaan muistiin käsittelyä varten. Kun rivit luetaan yksi kerrallaan levyltä muistiin, tarkistetaan WHERE-lauseke. Rivejä, jotka WHERE-lauseen epäonnistuvat, ei ladata muistiin. Siten WHERE-lause arvioidaan jokaiselle riville, kun SQL-moottori käsittelee niitä.
Päinvastoin, HAVING-lause tulee kuvaan vasta kun rivit on ladattu muistiin. Kun muisti on ladattu, aggregoidut toiminnot suorittavat tehtävänsä riveillä, joilla on haluttu tila.
Jos nyt laitettaisiin WHERE-lause koostuvaan funktioon, kuten avg (), se sekoittaisi SQL-moottorin siihen, sisällytetäänkö rivi keskiarvon laskemiseen vai ei. Pohjimmiltaan käskymme moottoria olemaan lukematta riviä, koska se ei läpäissyt WHERE-lausekkeen avg () -kriteerejä. Mutta hei, sen määrittämiseksi, onko avg () -laskentaperusteet läpäisseet vai epäonnistuneet, rivi on luettava muistiin. Umpikujatila.
Syntaksi
SELECT
FROM
Asiakas ID | Asiakkaan nimi | Kaupunki | Maa |
1 | Anja Damian | Berliini | Saksa |
2 | Denny Cockett | México DF | Meksiko |
3 | Eleanor Calnan | México DF | Meksiko |
4 | Albertha Albury | Lontoo | UK |
5 | Latisha Nembhard | Luleå | Ruotsi |
6 | Madalene Bing | Mannheim | Saksa |
7 | Rebecka Beegle | Strasbourg | Ranska |
8 | Rosy Tippie | Madrid | Espanja |
9 | Audie Khan | Marseille | Ranska |
10 | Hildegard Burrowes | Tsawassen | Kanada |
11 | Cordell Dutremble | Lontoo | UK |
12 | Nora Reyna | Buenos Aires | Argentiina |
13 | Ursula Laforest | México DF | Meksiko |
14 | Claudie Neel | Bern | Sveitsi |
15 | Portia Yee | Sao Paulo | Brasilia |
16 | Angila Segarra | Lontoo | UK |
17 | Lise Wexler | aachen | Saksa |
18 | Ned Mendivil | Nantes | Ranska |
19 | Sara Vidaurri | Lontoo | UK |
20 | Tayna Navin | Graz | Itävalta |
21 | Pura Ray | Sao Paulo | Brasilia |
22 | Erika Byard | Madrid | Espanja |
23 | Jimmie Luke | Lille | Ranska |
24 | Shayla Byington | Bräcke | Ruotsi |
25 | Christiana Boden | München | Saksa |
26 | Irina Nitta | Nantes | Ranska |
27 | Bryanna Alls | Torino | Italia |
28 | Norah Picken | Lissabon | Portugali |
29 | Moriah Stwart | Barcelona | Espanja |
30 | Idella Harriott | Sevilla | Espanja |
Tilausnumero | Asiakas ID | Tilauspäivämäärä |
10254 | 14 | 07.11.1996 |
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 | 08.12.1996 |
10280 | 5 | 14-08-1996 |
10289 | 11 | 26-08-1996 |
10290 | 15 | 27-08-1996 |
10297 | 7 | 4.9.1996 |
10303 | 30 | 09.11.1996 |
10308 | 2 | 18-09-1996 |
10311 | 18 | 20-09-1996 |
10326 | 8 | 10.10.1996 |
10327 | 24 | 10.11.1996 |
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 | 06.11.1996 |
10351 | 20 | 11.11.1996 |
10352 | 28 | 12-11-1996 |
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 | 03.12.1996 |
10378 | 24 | 10.12.1996 |
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 | 01.01.1997 |
10402 | 20 | 02.01.1997 |
10403 | 20 | 03.1.1997 |
10408 | 23 | 08.1.1997 |
10410 | 10 | 01.10.1997 |
10411 | 10 | 01.10.1997 |
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 | 2.3.1997 |
10435 | 16 | 2.4.1997 |
10436 | 7 | 05-02-1997 |
10442 | 20 | 02.11.1997 |
Nyt haluamme tietää asiakkaidemme, joista maista on tehty yhteensä vähintään viisi tilausta kanssamme. Se voi olla yksi asiakas, joka tekee yli 5 tilausta, tai 5 asiakas, joka antaa yhden tilauksen jokaisesta.
Tämän saavuttamiseksi meidän on tehtävä
Vaihe 1 : Yhdistä kaksi pöytää
Vaihe 2: Ryhmittele asiakkaat heidän maidensa perusteella
Vaihe 3: Laske tilausten määrä jokaiselle ryhmälle
Vaihe 4: Suodata tulokset vähintään viidelle tilaukselle
Formuloidaan komento:
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
Tässä ovat tulokset:
Maa | NumberOfOrders |
Itävalta | 10 |
Ranska | 9 |
Ruotsi | 7 |
Saksa | 6 |
UK | 6 |
Johtopäätös - SQL-lauseke
Siksi olemme nähneet, mikä HAVING-lausekkeen tarkoitus on ja miten se toimii. On tärkeää ymmärtää perustyöt. Muuten saatat joutua hämmentämään siitä, miksi HAVING-lause ei tuota toivottuja tuloksia. Jatka pelaamista erilaisilla pöydillä, liittymisillä ja yhdistelmillä yhdessä HAVING-lauseen kanssa.
Suositellut artikkelit
Tämä on opas SQL HAVING -lauseeseen. Tässä keskustellaan HAVING-lauseen toiminnasta SQL: ssä ja esimerkistä seuraavan asiakastaulukon kanssa. Voit myös käydä läpi muiden ehdottamiemme artikkeleidemme -
- SQL-lisäyskysely
- Vieras avain SQL: ssä
- Erottuva avainsana SQL: ssä
- SQL-näkymät
- Kuusi suosituinta kyselyesimerkkiä sisäisestä liittymisestä Oracliin