logo

Differenza tra DOVE e AVERE

Le clausole WHERE e HAVING vengono discusse in modo approfondito in questo articolo. Vengono utilizzati anche per filtrare i record nelle query SQL. La differenza tra le clausole WHERE e HAVING è la domanda più comune posta durante un colloquio. La differenza principale tra loro è che la clausola WHERE viene utilizzata per specificare una condizione per filtrare i record prima che venga effettuato qualsiasi raggruppamento, mentre la clausola HAVING viene utilizzata per specificare una condizione per filtrare i valori da un gruppo. Prima di fare il confronto, conosceremo prima questi SQL clausole.

DOVE vs AVERE

Dove la clausola

La clausola WHERE in MySQL viene utilizzata con SELECT , INSERIRE , AGGIORNAMENTO , E ELIMINARE query per filtrare i dati dalla tabella o dalla relazione. Descrive una condizione specifica quando si recuperano record da una singola tabella o da più tabelle utilizzando la clausola JOIN. Se la condizione specificata è soddisfatta, restituisce il valore particolare dalla tabella. La clausola WHERE pone le condizioni sulle colonne selezionate.

Anche la clausola WHERE in MySQL può implementare i connettivi logici AND, OR e NOT. Sono conosciute come la condizione booleana che deve essere VERO per recuperare i dati. Le espressioni dei connettivi logici utilizzano gli operatori di confronto come i loro operandi<, ,>=, = e . Gli operatori di confronto vengono solitamente utilizzati per confrontare stringhe ed espressioni aritmetiche.

La seguente sintassi illustra l'uso della clausola WHERE:

 SELECT column_lists, FROM table_name WHERE conditions GROUP BY column_lists; 

Facciamo un esempio per comprendere questa clausola. Supponiamo di avere una tabella denominata dipendenti che contengono i seguenti dati:

DOVE vs AVERE

Se vogliamo per ottenere il dettaglio del dipendente le cui ore di lavoro sono superiori a 9 , allora possiamo usare l'affermazione nel modo seguente:

 mysql&gt; SELECT * FROM employees WHERE working_hour &gt; 9; 

Otterremo l'output seguente in cui possiamo vedere i dettagli dei dipendenti le cui ore lavorative sono superiori a 9:

DOVE vs AVERE

Se utilizziamo la query precedente con il file RAGGRUPPA PER clausola , otterremo il risultato diverso:

 mysql&gt; SELECT * FROM employees WHERE working_hour &gt; 9 GROUP BY name; 

Ecco l'output:

DOVE vs AVERE

Clausola AVENTE

Clausola HAVING in MySQL utilizzato insieme a GROUP BY La clausola ci consente di specificare le condizioni che filtrano quali risultati del gruppo appaiono nel risultato. Restituisce solo i valori dei gruppi nel risultato finale che soddisfano determinate condizioni. Possiamo anche usare insieme le clausole WHERE e HAVING durante la selezione. In questo caso, la clausola WHERE filtra prima le singole righe, poi le righe vengono raggruppate, esegue calcoli aggregati e infine la clausola HAVING filtra i gruppi.

Questa clausola pone condizioni sui gruppi creati dalla clausola GROUP BY. Si comporta come la clausola WHERE quando l'istruzione SQL non utilizza la parola chiave GROUP BY. Possiamo utilizzare le funzioni aggregate (di gruppo) come SUM , MIN, MAX, AVG e CONTARE solo con due clausole: SELECT e HAVING.

La seguente sintassi illustra l'uso della clausola HAVING:

 SELECT column_lists, aggregate_function (expression) FROM table_name WHERE conditions GROUP BY column_lists HAVING condition; 

Facciamo un esempio per comprendere questa clausola. Qui stiamo considerando la stessa tabella dipendenti per dimostrazione.

Se vogliamo per ottenere l'orario di lavoro totale per ciascun dipendente il cui orario di lavoro è superiore a 6 ore , allora possiamo usare l'affermazione nel modo seguente:

 mysql&gt; SELECT name, SUM(working_hour) AS &apos;Total working hours&apos; FROM employees GROUP BY name HAVING SUM(working_hour) &gt; 6; 

Otterremo l'output seguente in cui possiamo vedere le ore lavorative totali di ciascun dipendente:

DOVE vs AVERE

Differenze chiave tra la clausola WHERE e HAVING

I seguenti punti spiegano le principali differenze tra database e schema:

  • La clausola WHERE filtra singole righe, mentre la clausola HAVING filtra i gruppi anziché una riga alla volta.
  • Non possiamo utilizzare la clausola WHERE con funzioni aggregate perché funziona per filtrare singole righe. Al contrario, HAVING può funzionare con funzioni aggregate perché viene utilizzato per filtrare i gruppi.
  • Le operazioni sulle righe vengono gestite dalla clausola WHERE, mentre la clausola HAVING gestisce le operazioni sulle colonne su righe o gruppi riepilogati.
  • WHERE viene prima di GROUP BY, il che significa che la clausola WHERE filtra le righe prima di eseguire calcoli aggregati. HAVING viene dopo GROUP BY, il che significa che la clausola HAVING filtra le righe dopo aver eseguito calcoli aggregati. Di conseguenza, HAVING è più lento di WHERE in termini di efficienza e dovrebbe essere evitato ove possibile.
  • Possiamo combinare insieme le clausole WHERE e HAVING in una query SELECT. In questo caso, la clausola WHERE viene utilizzata per prima per filtrare le singole righe. Le righe vengono quindi raggruppate, vengono eseguiti calcoli aggregati e infine viene utilizzata la clausola HAVING per filtrare i gruppi.
  • La clausola WHERE recupera i dati desiderati in base alla condizione specificata. D'altra parte, la clausola HAVING recupera prima i dati interi, quindi la separazione viene eseguita in base alla condizione specificata.
  • Senza un'istruzione SELECT, non possiamo utilizzare la clausola HAVING. Al contrario, possiamo usare un WHERE con le istruzioni SELECT, UPDATE e DELETE.
  • La clausola WHERE è un pre-filtro, mentre la clausola HAVING è un post-filtro.

DOVE vs. AVERE Tabella comparativa

La seguente tabella comparativa spiega rapidamente le principali differenze:

Base di confronto Dove la clausola Clausola AVENTE
Definizione Viene utilizzato per eseguire la filtrazione su singole file. Viene utilizzato per eseguire il filtraggio sui gruppi.
Di base È implementato nelle operazioni di riga. È implementato nelle operazioni sulle colonne.
Recupero dati La clausola WHERE recupera i dati specifici da righe particolari in base alla condizione specificata La clausola HAVING recupera prima i dati completi. Quindi li separa in base alla condizione data.
Funzioni aggregate La clausola WHERE non consente di lavorare con funzioni aggregate. La clausola HAVING può funzionare con funzioni aggregate.
Agire come La clausola WHERE funge da prefiltro. La clausola HAVING funge da post-filtro.
Usato con Possiamo utilizzare la clausola WHERE con le istruzioni SELECT, UPDATE e DELETE. La clausola HAVING può essere utilizzata solo con l'istruzione SELECT.
RAGGRUPPA PER La clausola GROUP BY viene dopo la clausola WHERE. La clausola GROUP BY viene prima della clausola HAVING.

Conclusione

In questo articolo abbiamo fatto un confronto tra la clausola WHERE e HAVING. Qui concludiamo che entrambe le clausole funzionano allo stesso modo nel filtrare i dati, tranne che per alcune funzionalità aggiuntive che rendono la clausola HAVING più popolare. Possiamo lavorare in modo efficiente con funzioni aggregate nella clausola HAVING mentre WHERE non consente funzioni aggregate.