Aanbevolen, 2023

Editor'S Choice

Verschil tussen Where and Having-clausule in SQL

WHERE en HIG clausule worden hoofdzakelijk gebruikt in de verklaring van SQL-query's. Hiermee kunnen we de combinatie in de resultaatrelatie beperken door een specifiek predikaat te gebruiken. Het grote verschil tussen WHERE en HAVING is dat de WHERE-clausule de voorwaarden specificeert voor het selecteren van de tuples (rijen) uit de relaties, inclusief verbindingsvoorwaarden indien nodig. Aan de andere kant specificeert de HAVING-clausule een voorwaarde voor de groepen die worden geselecteerd in plaats van voor de afzonderlijke tupels.

SQL staat voor Structured Query Language ; het is een uitgebreide of declaratieve databasetaal die wordt gebruikt voor toegang tot de gegevens uit de databases.

Vergelijkingstabel

Basis voor vergelijkingWAARHEBBEN
basis-Geïmplementeerd in rijbewerkingen.Geïmplementeerd in kolombewerkingen.
Toegepast opEnkele rijSamengevatte rij of groepen.
Gegevens ophalenHet haalt alleen de specifieke gegevens van bepaalde rijen op volgens de voorwaarde.Eerst worden de volledige gegevens opgehaald en vervolgens gescheiden volgens de voorwaarde.
Aggregate FunctionsKan niet worden weergegeven in WHERE-component.Kan worden weergegeven in de HAVING-component.
Gebruikt metSELECT en andere instructies zoals UPDATE, DELETE of een van beide.Kan niet worden gebruikt zonder een SELECT-instructie.
Fungeren alsPre-filterPost-filter
GROEP DOORKomt achter WHERE.Komt na HAVING.

Definitie van Where-clausule

De SQL WHERE-component wordt gebruikt om een ​​voorwaarde te beschrijven op het moment dat de gegevens uit een enkele tabel worden opgehaald of door samen te voegen met meerdere tabellen. Het geeft alleen de specifieke waarde uit de tabel als aan de gegeven voorwaarde is voldaan. WHERE-component wordt gebruikt om de records te doordringen en alleen de benodigde records op te halen.

SQL implementeert ook de logische connectieven en, of en niet in de WHERE-component die ook bekend staat als de boolean- voorwaarde; de voorwaarde moet waar zijn om de tuples op te halen. De operanden van de logische verbindings- expressies omvatten de vergelijkingsoperatoren zoals <, <=, >, > =, =, en . Deze vergelijkingsoperatoren vergelijken strings en rekenkundige expressies. Het kan worden gebruikt in de SELECT- instructie, maar ook in UPDATE, DELETE- instructies.

Laten we een voorbeeld nemen. De onderstaande tabel met de naam ' Verkoop ' bestaat uit de kenmerken ' Product ' en ' Sales_amount '.

De volgende query moet worden geschreven om de Total_sales van telefoon en luidsprekers te berekenen.

 SELECT Product, sum (Sales_amount) AS Total_sales FROM Sales WHERE Product in ('Phone', 'Speakers') GROUP BY Product; 

De volgende uitvoer is de resulterende uitvoer waarbij de rijen eerst worden gefilterd, telefoon- en luidsprekerrijen worden opgehaald en de verzamelfunctie wordt uitgevoerd.

Definitie van een clausule

SQL biedt een HAVING-component die samen met de GROUP BY- component kan worden gebruikt. Deze HAVING-clausule helpt bij het ophalen van de waarden voor de groepen die aan bepaalde voorwaarden voldoen. WHERE-component kan ook in combinatie met de HAVING-component gebruiken tijdens selectie, WHERE-component filtert de afzonderlijke rij. De rijen worden vervolgens gegroepeerd en aggregatieberekeningen worden uitgevoerd, uiteindelijk filteren de groepen de clausule HAVING.

Het gedraagt ​​zich hetzelfde als WAAR wanneer het sleutelwoord GROUP BY niet wordt gebruikt. De groepsfuncties zoals min, max, avg, sum en count kunnen in slechts twee clausules voorkomen: SELECT- en HAVING-component. Het levert een voorwaarde op de tupels die overeenkomen met elke waarde in de groep attributen. De enige reeks records die aan de voorwaarde voldoet, wordt als resultaat weergegeven.

Hier nemen we ook hetzelfde voorbeeld als de WHERE-clausule en overwegen we dezelfde ' Verkoop' -tabel. Wanneer we de Total_sales van telefoon en sprekers willen berekenen met behulp van de HAVING- component, zullen we de volgende query schrijven.

 SELECT Product, sum (Sales_amount) AS Total_sales FROM Sales GROUP BY Product HAVING Product in ('telefoon', 'Speakers'); 

De query produceert de volgende uitvoer waarbij de producten eerst worden opgehaald, waarna de aggregaatfunctie (som) wordt uitgevoerd en ten slotte groepen worden gefilterd in tegenstelling tot de WHERE-component.

Wanneer we alleen die producten willen vinden waarvan de Total_sales groter is dan 1000. De query kan worden geschreven als:

 SELECT Product, sum (Sales_amount) AS Total_sales FROM Sales GROUP BY Product HAVING sum (Sales_amount)> 1000; 

De geproduceerde output is:

Dit kan niet worden uitgevoerd met de WHERE-component ondanks HAVING en er wordt een foutbericht gegenereerd omdat de WHERE-component niet kan worden gebruikt met statistische functies.

Belangrijkste verschillen tussen Where and Having-clausule

  1. WHERE-component wordt gebruikt in rijbewerkingen en toegepast op een enkele rij, terwijl de HAVING-clausule wordt gebruikt in kolombewerkingen en kan worden toegepast op samengevatte rijen of groepen.
  2. In de WHERE-component worden de gewenste gegevens opgehaald volgens de toegepaste voorwaarde. De clausule HAVING daarentegen haalt hele gegevens op en de scheiding gebeurt volgens de voorwaarde.
  3. Geaggregeerde functies zoals min, sum, max, avg kunnen nooit worden weergegeven samen met de WHERE-component. Tegenover kunnen deze functies verschijnen in de HAVING-component.
  4. HAVING-component kan niet worden gebruikt zonder een SELECT-instructie. Omgekeerd kan WHERE worden gebruikt met SELECT, UPDATE, DELETE, etc.
  5. WHERE-component gedraagt ​​zich als een pre-filter terwijl de HUSE-clausule fungeert als een postfilter.
  6. WHERE-clausule in combinatie met GROUP BY komt vóór GROUP BY. Dit betekent dat WHERE filterrijen vóór aggregatieberekeningen worden uitgevoerd. Aan de andere kant komt HAVING na GROEP BY, wat betekent dat het filtert nadat er aggregaatberekeningen zijn uitgevoerd.

Conclusie

WHERE en HAVING-clausule werkt op dezelfde manier, behalve de extra functie waarnaar HAVING-component populair is. HAVING-component kan efficiënt werken met statistische functies, terwijl WHERE niet kan worden gebruikt met verzamelfuncties.

Top