Straipsniai WHERE ir HAVING išsamiai aptariami šiame straipsnyje. Jie taip pat naudojami SQL užklausų įrašams filtruoti. Skirtumas tarp WHERE ir HAVING yra dažniausiai užduodamas klausimas pokalbio metu. Pagrindinis skirtumas tarp jų yra tas, kad WHERE sąlyga yra naudojama norint nurodyti įrašų filtravimo sąlygą prieš atliekant bet kokius grupavimus, o sąlyga HAVING naudojama apibrėžti reikšmių filtravimo iš grupės sąlygą. Prieš atlikdami palyginimą, pirmiausia sužinosime tai SQL išlygos.
KUR išlyga
WHERE sąlyga MySQL yra naudojama su SELECT, ĮDĖTI , ATNAUJINTI , ir IŠTRINTI užklausos duomenims iš lentelės arba santykio filtruoti. Jame aprašoma specifinė sąlyga, kai įrašai gaunami iš vienos lentelės arba kelių lentelių naudojant JOIN sąlygą. Jei nurodyta sąlyga įvykdoma, ji grąžina tam tikrą reikšmę iš lentelės. WHERE sąlyga nustato sąlygas pasirinktuose stulpeliuose.
WHERE sąlyga MySQL taip pat gali įgyvendinti loginius ryšius IR , ARBA ir NE. Jie žinomi kaip Būlio sąlyga, kuri turi būti tiesa norėdami gauti duomenis. Loginių jungčių išraiškos naudoja palyginimo operatorius, kaip jų operandai<, ,>=, = ir . Palyginimo operatoriai paprastai naudojami eilutėms ir aritmetinėms išraiškoms palyginti.,>
Ši sintaksė iliustruoja WHERE sąlygos naudojimą:
SELECT column_lists, FROM table_name WHERE conditions GROUP BY column_lists;
Paimkime pavyzdį, kad suprastume šią sąlygą. Tarkime, kad turime lentelę pavadinimu darbuotojų kuriuose yra šie duomenys:
Jei norime gauti informaciją apie darbuotoją, kurio darbo valandos ilgesnės nei 9 , tada teiginį galime naudoti taip:
mysql> SELECT * FROM employees WHERE working_hour > 9;
Gausime žemiau pateiktą išvestį, kurioje pamatysime informaciją apie darbuotoją, kurio darbo valandos yra ilgesnės nei 9:
java eilutė su formatu
Jei naudosime aukščiau pateiktą užklausą su GRUPUOTI PAGAL , gausime skirtingą rezultatą:
mysql> SELECT * FROM employees WHERE working_hour > 9 GROUP BY name;
Štai išvestis:
TURIMAS išlygą
TURIMAS išlygą MySQL naudojamas kartu su GROUP BY sąlyga leidžia mums nurodyti sąlygas, kurios filtruoja, kurios grupės rezultatai rodomi rezultate. Galutiniame rezultate ji grąžina tik tas vertes iš grupių, kurios atitinka tam tikras sąlygas. Atrankos metu taip pat galime kartu naudoti sąlygą WHERE ir HAVING. Tokiu atveju WHERE sąlyga pirmiausia filtruoja atskiras eilutes, tada eilutės sugrupuojamos, atlieka apibendrintus skaičiavimus ir galiausiai HAVING filtruoja grupes.
Šis punktas nustato sąlygas grupėms, sukurtoms pagal GROUP BY sąlygą. Jis veikia kaip WHERE sąlyga, kai SQL sakinyje nenaudojamas raktinis žodis GROUP BY. Galime naudoti suvestines (grupines) funkcijas, tokias kaip SUM, MIN, MAX, AVG ir COUNT tik su dviem išlygomis: SELECT ir HAVING.
Ši sintaksė iliustruoja išlygos HAVING naudojimą:
c++ skaidymo eilutė
SELECT column_lists, aggregate_function (expression) FROM table_name WHERE conditions GROUP BY column_lists HAVING condition;
Paimkime pavyzdį, kad suprastume šią sąlygą. Čia mes svarstome tą pačią lentelę darbuotojų demonstravimui.
Jei norime kiekvienam darbuotojui, kurio darbo laikas ilgesnis nei 6 valandos, gauti bendrą darbo laiką , tada teiginį galime naudoti taip:
mysql> SELECT name, SUM(working_hour) AS 'Total working hours' FROM employees GROUP BY name HAVING SUM(working_hour) > 6;
Gausime žemiau pateiktą išvestį, kurioje matysime kiekvieno darbuotojo bendras darbo valandas:
Pagrindiniai WHERE ir HAVING sąlygos skirtumai
Šie punktai paaiškina pagrindinius duomenų bazės ir schemos skirtumus:
- WHERE sąlyga filtruoja atskiras eilutes, o sąlyga HAVING filtruoja grupes, o ne vieną eilutę.
- Negalime naudoti WHERE sąlygos su agregacinėmis funkcijomis, nes ji tinka atskiroms eilutėms filtruoti. Priešingai, HAVING gali veikti su agregacinėmis funkcijomis, nes ji naudojama grupėms filtruoti.
- Eilučių operacijas tvarko sąlyga WHERE, o sąlyga HAVING – stulpelių operacijas apibendrintose eilutėse arba grupėse.
- WHERE yra prieš GROUP BY, o tai reiškia, kad WHERE sąlyga filtruoja eilutes prieš atliekant apibendrintus skaičiavimus. HAVING ateina po GROUP BY, o tai reiškia, kad HAVING sąlyga filtruoja eilutes atlikus bendrus skaičiavimus. Vadinasi, HAVING yra lėtesnis nei WHERE efektyvumo požiūriu ir to reikėtų vengti, kur tik įmanoma.
- SELECT užklausoje galime sujungti sąlygą WHERE ir HAVING. Šiuo atveju WHERE sąlyga pirmiausia naudojama atskiroms eilutėms filtruoti. Tada eilutės sugrupuojamos, atliekami apibendrinti skaičiavimai, o galiausiai grupėms filtruoti naudojama sąlyga HAVING.
- WHERE sąlyga nuskaito norimus duomenis pagal nurodytą sąlygą. Kita vertus, sąlyga HAVING pirmiausia paima visus duomenis, o tada atskyrimas atliekamas pagal nurodytą sąlygą.
- Be SELECT sakinio negalime naudoti išlygos HAVING. Ir atvirkščiai, galime naudoti WHERE su teiginiais SELECT, UPDATE ir DELETE.
- WHERE sąlyga yra išankstinis filtras, o HAVING sąlyga yra pofiltras.
KUR ir HAVING palyginimo diagrama
Šioje palyginimo lentelėje greitai paaiškinami pagrindiniai jų skirtumai:
Palyginimo pagrindas | KUR išlyga | TURIMAS išlygą |
---|---|---|
Apibrėžimas | Jis naudojamas atskirų eilučių filtravimui atlikti. | Jis naudojamas grupių filtravimui atlikti. |
Pagrindinis | Jis įgyvendinamas eilučių operacijose. | Jis įgyvendinamas stulpelių operacijose. |
Duomenų gavimas | WHERE sąlyga gauna konkrečius duomenis iš konkrečių eilučių pagal nurodytą sąlygą | Išlyga HAVING pirmiausia gauna visus duomenis. Tada jis atskiria juos pagal pateiktą sąlygą. |
Suvestinės funkcijos | WHERE sąlyga neleidžia dirbti su suvestinėmis funkcijomis. | Sąlyga HAVING gali veikti su agreguotomis funkcijomis. |
Elgtis lyg | WHERE sąlyga veikia kaip išankstinis filtras. | Sąlyga HAVING veikia kaip papildomas filtras. |
Naudotas su | Mes galime naudoti WHERE sąlygą su teiginiais SELECT, UPDATE ir DELETE. | Sąlyga HAVING gali būti naudojama tik su SELECT sakiniu. |
GRUPUOTI PAGAL | Sąlyga GROUP BY yra po WHERE. | Sąlyga GROUP BY yra prieš sąlygą HAVING. |
Išvada
Šiame straipsnyje palyginome WHERE ir HAVING sąlygą. Čia darome išvadą, kad abu punktai filtruojant duomenis veikia vienodai, išskyrus tai, kad dėl tam tikrų papildomų funkcijų HAVING sąlyga tampa populiaresnė. Galime efektyviai dirbti su suvestinėmis funkcijomis, esančiomis HAVING sąlygoje, o WHERE neleidžia naudoti agreguotų funkcijų.