De WHERE- en HAVING-clausules worden in dit artikel uitgebreid besproken. Ze worden ook gebruikt om records in SQL-query's te filteren. Het verschil tussen de WHERE- en HAVING-clausule is de meest voorkomende vraag die tijdens een sollicitatiegesprek wordt gesteld. Het belangrijkste verschil tussen beide is dat de WHERE-clausule wordt gebruikt om een voorwaarde op te geven voor het filteren van records voordat er groeperingen worden gemaakt, terwijl de HAVING-clausule wordt gebruikt om een voorwaarde op te geven voor het filteren van waarden uit een groep. Voordat we de vergelijking maken, zullen we deze eerst weten SQL clausules.
WAAR clausule
De WHERE-clausule in MySQL wordt gebruikt met SELECT , INVOEGEN , UPDATE , En VERWIJDEREN query's om gegevens uit de tabel of relatie te filteren. Het beschrijft een specifieke voorwaarde bij het ophalen van records uit een enkele tabel of meerdere tabellen met behulp van de JOIN-clausule. Als aan de opgegeven voorwaarde is voldaan, wordt de specifieke waarde uit de tabel geretourneerd. De WHERE-clausule plaatst voorwaarden op de geselecteerde kolommen.
De WHERE-clausule in MySQL kan dat ook implementeer de logische verbindingen EN, OF, en NIET. Ze staan bekend als de Booleaanse voorwaarde die moet zijn WAAR om de gegevens op te halen. De logische connectieve expressies gebruiken de vergelijkingsoperatoren zoals hun operanden eruitzien<, ,>=, =, en . De vergelijkingsoperatoren worden meestal gebruikt om tekenreeksen en rekenkundige uitdrukkingen te vergelijken.,>
De volgende syntaxis illustreert het gebruik van de WHERE-clausule:
SELECT column_lists, FROM table_name WHERE conditions GROUP BY column_lists;
Laten we een voorbeeld nemen om deze clausule te begrijpen. Stel dat we een tabel hebben met de naam medewerkers die de volgende gegevens bevatten:
Java versus c++
Als we willen om de werknemersgegevens op te halen wiens werkuren groter zijn dan 9 , dan kunnen we de verklaring als volgt gebruiken:
mysql> SELECT * FROM employees WHERE working_hour > 9;
We krijgen de onderstaande uitvoer waarin we werknemersdetails kunnen zien wiens werkuren groter zijn dan 9:
Als we de bovenstaande query gebruiken met de GROEP DOOR clausule , krijgen we het andere resultaat:
mysql> SELECT * FROM employees WHERE working_hour > 9 GROUP BY name;
Hier is de uitvoer:
HEBBEN-clausule
HAVING-clausule in MySQL gebruikt in combinatie met GROUP BY Met de clausule kunnen we voorwaarden specificeren die filteren welke groepsresultaten in het resultaat verschijnen. Het retourneert alleen die waarden uit de groepen in het eindresultaat die aan bepaalde voorwaarden voldoen. We kunnen tijdens de selectie ook de WHERE- en HAVING-clausule samen gebruiken. In dit geval filtert de WHERE-clausule eerst de afzonderlijke rijen, vervolgens worden de rijen gegroepeerd, worden aggregatieberekeningen uitgevoerd en ten slotte filtert de HAVING-clausule de groepen.
Deze clausule plaatst voorwaarden voor groepen die zijn gemaakt door de GROUP BY-clausule. Het gedraagt zich als de WHERE-clausule wanneer de SQL-instructie het trefwoord GROUP BY niet gebruikt. We kunnen de geaggregeerde (groeps)functies gebruiken, zoals SUM , MIN, MAX, AVG en GRAAF alleen met twee clausules: SELECT en HAVING.
De volgende syntaxis illustreert het gebruik van de HAVING-clausule:
SELECT column_lists, aggregate_function (expression) FROM table_name WHERE conditions GROUP BY column_lists HAVING condition;
Laten we een voorbeeld nemen om deze clausule te begrijpen. Hier beschouwen we dezelfde tabel medewerkers voor demonstratie.
Als we willen om de totale werkuren te verkrijgen voor elke werknemer wiens werktijd meer dan 6 uur bedraagt , dan kunnen we de verklaring als volgt gebruiken:
mysql> SELECT name, SUM(working_hour) AS 'Total working hours' FROM employees GROUP BY name HAVING SUM(working_hour) > 6;
We krijgen de onderstaande uitvoer waarin we de totale werkuren van elke werknemer kunnen zien:
Belangrijkste verschillen tussen WHERE en HAVING-clausule
De volgende punten verklaren de belangrijkste verschillen tussen database en schema:
- De WHERE-clausule filtert individuele rijen, terwijl de HAVING-clausule groepen filtert in plaats van één rij tegelijk.
- We kunnen de WHERE-clausule niet gebruiken met aggregatiefuncties, omdat deze werkt voor het filteren van individuele rijen. HAVING kan daarentegen werken met aggregatiefuncties omdat het wordt gebruikt om groepen te filteren.
- Rijbewerkingen worden afgehandeld door de WHERE-clausule, terwijl de HAVING-clausule kolombewerkingen naar samengevatte rijen of groepen afhandelt.
- WHERE komt vóór GROUP BY, wat betekent dat de WHERE-clausule rijen filtert voordat aggregatieberekeningen worden uitgevoerd. HAVING komt na GROUP BY, wat betekent dat de HAVING-clausule rijen filtert na het uitvoeren van aggregatieberekeningen. Bijgevolg is HAVING langzamer dan WAAR in termen van efficiëntie en moet waar mogelijk worden vermeden.
- We kunnen de WHERE- en HAVING-clausule samen combineren in een SELECT-query. In dit geval wordt eerst de WHERE-clausule gebruikt om individuele rijen te filteren. De rijen worden vervolgens gegroepeerd, er worden aggregatieberekeningen uitgevoerd en ten slotte wordt de HAVING-clausule gebruikt om de groepen te filteren.
- De WHERE-clausule haalt de gewenste gegevens op op basis van de opgegeven voorwaarde. Aan de andere kant haalt de HAVING-clausule eerst volledige gegevens op, en vervolgens wordt de scheiding uitgevoerd op basis van de opgegeven voorwaarde.
- Zonder een SELECT-instructie kunnen we de HAVING-clausule niet gebruiken. Omgekeerd kunnen we een WHERE gebruiken met SELECT-, UPDATE- en DELETE-instructies.
- De WHERE-clausule is een voorfilter, terwijl de HAVING-clausule een postfilter is.
WAAR versus HAVING-vergelijkingstabel
In het volgende vergelijkingsoverzicht worden de belangrijkste verschillen op een snelle manier uitgelegd:
arp-opdracht
Vergelijkingsbasis | WAAR clausule | HEBBEN-clausule |
---|---|---|
Definitie | Het wordt gebruikt om filtratie op individuele rijen uit te voeren. | Het wordt gebruikt om filtratie op groepen uit te voeren. |
Basis | Het wordt geïmplementeerd in rijbewerkingen. | Het wordt geïmplementeerd in kolombewerkingen. |
Gegevens ophalen | De WHERE-clausule haalt de specifieke gegevens op uit bepaalde rijen op basis van de opgegeven voorwaarde | De HAVING-clausule haalt eerst de volledige gegevens op. Vervolgens worden ze gescheiden op basis van de gegeven voorwaarde. |
Geaggregeerde functies | De WHERE-clausule staat het werken met aggregatiefuncties niet toe. | De HAVING-clausule kan werken met aggregatiefuncties. |
Fungeren als | De WHERE-clausule fungeert als een voorfilter. | De HAVING-clausule fungeert als een postfilter. |
Gebruikt met | We kunnen de WHERE-clausule gebruiken met de SELECT-, UPDATE- en DELETE-instructies. | De HAVING-clausule kan alleen worden gebruikt met de SELECT-instructie. |
GROEP DOOR | De GROUP BY-clausule komt na de WHERE-clausule. | De GROUP BY-clausule komt vóór de HAVING-clausule. |
Conclusie
In dit artikel hebben we een vergelijking gemaakt tussen de WHERE- en HAVING-clausule. Hier concluderen we dat beide clausules op dezelfde manier werken bij het filteren van de gegevens, behalve dat een extra functie de HAVING-clausule populairder maakt. We kunnen efficiënt werken met geaggregeerde functies in de HAVING-clausule, terwijl WHERE geen geaggregeerde functies toestaat.