Šajā rakstā ir padziļināti apskatītas klauzulas WHERE un HAVING. Tos izmanto arī, lai filtrētu ierakstus SQL vaicājumos. Atšķirība starp WHERE un HAVING klauzulu ir visizplatītākais jautājums, kas tiek uzdots intervijas laikā. Galvenā atšķirība starp tām ir tā, ka WHERE klauzula tiek izmantota, lai norādītu nosacījumu ierakstu filtrēšanai pirms jebkādas grupēšanas, savukārt klauzula HAVING tiek izmantota, lai norādītu nosacījumu vērtību filtrēšanai no grupas. Pirms salīdzināšanas mēs vispirms uzzināsim tos SQL klauzulas.
KUR klauzula
WHERE klauzula MySQL tiek izmantota kopā ar SELECT, IEVIETOT , ATJAUNINĀT , un DZĒST vaicājumus, lai filtrētu datus no tabulas vai relācijas. Tas apraksta konkrētu nosacījumu, izgūstot ierakstus no vienas tabulas vai vairākām tabulām, izmantojot JOIN klauzulu. Ja norādītais nosacījums ir izpildīts, tas atgriež konkrēto vērtību no tabulas. Klauzula WHERE ievieto nosacījumus atlasītajās kolonnās.
WHERE klauzula MySQL var arī ieviest loģiskos savienojumus UN , VAI , un NĒ. Tie ir pazīstami kā Būla nosacījumi, kam jābūt taisnība lai izgūtu datus. Loģisko savienojumu izteiksmēs tiek izmantoti salīdzināšanas operatori kā to operandi<, ,>=, = un . Salīdzināšanas operatorus parasti izmanto, lai salīdzinātu virknes un aritmētiskās izteiksmes.,>
Tālāk norādītā sintakse ilustrē WHERE klauzulas izmantošanu:
SELECT column_lists, FROM table_name WHERE conditions GROUP BY column_lists;
Ņemsim piemēru, lai saprastu šo klauzulu. Pieņemsim, ka mums ir tabula ar nosaukumu darbiniekiem kas satur šādus datus:
java masīvs
Ja gribam lai iegūtu informāciju par darbinieku, kura darba laiks ir lielāks par 9 , tad mēs varam izmantot paziņojumu šādi:
mysql> SELECT * FROM employees WHERE working_hour > 9;
Mēs iegūsim zemāk redzamo izvadi, kurā varēsim redzēt informāciju par darbinieku, kura darba laiks ir lielāks par 9:
Ja mēs izmantojam iepriekš minēto vaicājumu ar GROUP BY klauzulu, mēs iegūsim atšķirīgu rezultātu:
mysql> SELECT * FROM employees WHERE working_hour > 9 GROUP BY name;
Šeit ir izvade:
AR klauzulu
IR klauzula MySQL izmanto kopā ar GROUP BY klauzula ļauj mums norādīt nosacījumus, kas filtrē, kuras grupas rezultāti parādās rezultātos. Tas atgriež tikai tās vērtības no grupām gala rezultātā, kas atbilst noteiktiem nosacījumiem. Atlases laikā varam izmantot arī klauzulu WHERE un HAVING kopā. Šajā gadījumā klauzula WHERE vispirms filtrē atsevišķas rindas, pēc tam rindas tiek grupētas, tiek veikti apkopotie aprēķini un visbeidzot HAVING klauzula filtrē grupas.
Šī klauzula izvirza nosacījumus grupām, kas izveidotas, izmantojot GROUP BY klauzulu. Tas darbojas kā WHERE klauzula, ja SQL priekšrakstā netiek izmantots GROUP BY atslēgvārds. Mēs varam izmantot apkopošanas (grupu) funkcijas, piemēram, SUM, MIN, MAX, AVG un SKAITĪT tikai ar divām klauzulām: SELECT un HAVING.
oops koncepcija java
Šī sintakse ilustrē klauzulas HAVING izmantošanu:
SELECT column_lists, aggregate_function (expression) FROM table_name WHERE conditions GROUP BY column_lists HAVING condition;
Ņemsim piemēru, lai saprastu šo klauzulu. Šeit mēs apsveram to pašu tabulu darbiniekiem demonstrācijai.
Ja gribam iegūt kopējo darba stundu skaitu katram darbiniekam, kura darba laiks ir lielāks par 6 stundām , tad mēs varam izmantot paziņojumu šādi:
mysql> SELECT name, SUM(working_hour) AS 'Total working hours' FROM employees GROUP BY name HAVING SUM(working_hour) > 6;
Mēs iegūsim zemāk redzamo izvadi, kurā varēsim redzēt katra darbinieka kopējo darba stundu skaitu:
Galvenās atšķirības starp WHERE un HAVING klauzulu
Šie punkti izskaidro galvenās atšķirības starp datu bāzi un shēmu:
- Klauzula WHERE filtrē atsevišķas rindas, savukārt klauzula HAVING filtrē grupas, nevis vienu rindu vienlaikus.
- Mēs nevaram izmantot WHERE klauzulu ar apkopotām funkcijām, jo tā darbojas atsevišķu rindu filtrēšanai. Turpretim HAVING var darboties ar apkopotām funkcijām, jo to izmanto grupu filtrēšanai.
- Rindu darbības apstrādā klauzula WHERE, savukārt klauzula HAVING apstrādā kolonnu darbības apkopotajās rindās vai grupās.
- WHERE ir pirms GROUP BY, kas nozīmē, ka WHERE klauzula filtrē rindas pirms apkopoto aprēķinu veikšanas. HAVING nāk aiz GROUP BY, kas nozīmē, ka klauzula HAVING filtrē rindas pēc apkopoto aprēķinu veikšanas. Līdz ar to efektivitātes ziņā HAVING ir lēnāks nekā WHERE, un no tā ir jāizvairās, kur vien iespējams.
- Mēs varam apvienot klauzulu WHERE un HAVING kopā SELECT vaicājumā. Šajā gadījumā, lai filtrētu atsevišķas rindas, vispirms tiek izmantota klauzula WHERE. Pēc tam rindas tiek grupētas, tiek veikti apkopotie aprēķini un, visbeidzot, grupu filtrēšanai tiek izmantota klauzula HAVING.
- WHERE klauzula izgūst vajadzīgos datus, pamatojoties uz norādīto nosacījumu. No otras puses, klauzula HAVING vispirms ienes veselus datus, un pēc tam tiek veikta atdalīšana, pamatojoties uz norādīto nosacījumu.
- Bez SELECT priekšraksta mēs nevaram izmantot HAVING klauzulu. Un otrādi, mēs varam izmantot WHERE ar priekšrakstiem SELECT, UPDATE un DELETE.
- WHERE klauzula ir priekšfiltrs, savukārt HAVING klauzula ir pēcfiltrs.
KUR un HAVING salīdzināšanas diagramma
Šajā salīdzināšanas tabulā ir ātri izskaidrotas to galvenās atšķirības:
java skeneris nākamais
Salīdzināšanas pamats | KUR Klauzula | AR klauzulu |
---|---|---|
Definīcija | To izmanto, lai veiktu filtrēšanu atsevišķās rindās. | To izmanto, lai veiktu filtrēšanu grupās. |
Pamata | Tas tiek ieviests rindu operācijās. | Tas tiek ieviests kolonnu darbībās. |
Datu ienešana | WHERE klauzula ienes konkrētus datus no noteiktām rindām, pamatojoties uz norādīto nosacījumu | HAVING klauzula vispirms ienes visus datus. Pēc tam tas atdala tos atbilstoši dotajam nosacījumam. |
Apkopotās funkcijas | WHERE klauzula neļauj strādāt ar apkopotām funkcijām. | HAVING klauzula var darboties ar apkopotām funkcijām. |
Uzvedies kā | Klauzula WHERE darbojas kā priekšfiltrs. | Klauzula HAVING darbojas kā pēcfiltrs. |
Lietots ar | Mēs varam izmantot WHERE klauzulu ar priekšrakstiem SELECT, UPDATE un DELETE. | Klauzulu HAVING var izmantot tikai ar priekšrakstu SELECT. |
GROUP BY | GROUP BY klauzula nāk aiz WHERE klauzulas. | Klauzula GROUP BY ir pirms klauzulas HAVING. |
Secinājums
Šajā rakstā mēs esam salīdzinājuši klauzulu WHERE un HAVING. Šeit mēs secinām, ka abas klauzulas datu filtrēšanā darbojas vienādi, izņemot dažas papildu funkcijas, kas padara HAVING klauzulu populārāku. Mēs varam efektīvi strādāt ar apkopotajām funkcijām klauzulā HAVING, savukārt WHERE neļauj izmantot apkopotās funkcijas.