Raccomandato, 2024

Scelta Del Redattore

Differenza tra dove e avendo clausola in SQL

Le clausole WHERE e HAVING sono utilizzate principalmente nella dichiarazione delle query SQL, che ci consentono di limitare la combinazione nella relazione dei risultati utilizzando un predicato specifico. La principale differenza tra WHERE e HAVING è che la clausola WHERE specifica le condizioni per selezionare le tuple (righe) dalle relazioni, incluse le condizioni di join, se necessario. D'altra parte, la clausola HAVING specifica una condizione sui gruppi selezionati anziché su singole tuple.

SQL sta per Structured Query Language ; è un linguaggio di database completo o dichiarativo utilizzato per accedere ai dati dai database.

Grafico comparativo

Base per il confrontoDOVEVISTA
Di baseImplementato nelle operazioni di riga.Implementato nelle operazioni di colonna.
Applicata aiFila unicaRiga o gruppi riepilogati.
Recupero dei datiRaccoglie solo i dati particolari da righe particolari in base alle condizioni.Inizialmente, i dati completi vengono recuperati e quindi separati in base alla condizione.
Funzioni aggregateNon può apparire nella clausola WHERE.Può apparire nella clausola HAVING.
Usato conSELECT e altre istruzioni come UPDATE, DELETE o uno di essi.Non può essere utilizzato senza un'istruzione SELECT.
Agire comePre filtroPost-filtro
RAGGRUPPA PERViene dopo DOVE.Viene dopo AVENDO.

Definizione della clausola Where

La clausola WHERE SQL viene utilizzata per descrivere una condizione al momento del recupero dei dati da una singola tabella o dall'unione con più tabelle. Restituisce solo il valore particolare dalla tabella se la condizione data è soddisfatta. La clausola WHERE viene utilizzata per permeare i record e recuperare solo i record necessari.

SQL implementa anche i connettivi logici e, o e non nella clausola WHERE che è anche nota come condizione booleana ; la condizione deve essere vera per recuperare le tuple. Gli operandi delle espressioni dei connettivi logici coinvolgono gli operatori di confronto come <, <=, >, > =, =, e . Questi operatori di confronto confrontano le stringhe e le espressioni aritmetiche. Può essere utilizzato nell'istruzione SELECT, così come nelle istruzioni UPDATE, DELETE .

Facciamo un esempio. La tabella riportata di seguito denominata come tabella " Vendite " è composta dagli attributi " Prodotto " e " Sales_amount ".

La seguente query deve essere scritta per calcolare Total_sales di telefono e altoparlanti.

 SELECT Prodotto, somma (Sales_amount) AS Total_sales FROM Vendite WHERE Prodotto in ("Telefono", "Altoparlanti") GROUP BY Prodotto; 

L'output seguente è l'output risultante in cui le righe vengono filtrate per prime, le righe del telefono e dell'altoparlante vengono recuperate, quindi viene eseguita la funzione di aggregazione.

Definizione di avere una clausola

SQL fornisce la clausola HAVING che può essere utilizzata insieme alla clausola GROUP BY . Questa clausola HAVING aiuta a recuperare i valori per i gruppi che soddisfano determinate condizioni. La clausola WHERE può anche essere utilizzata in congiunzione con la clausola HAVING durante la selezione, la clausola WHERE filtra la singola riga. Le righe vengono quindi raggruppate e vengono eseguiti i calcoli di aggregazione, infine la clausola HAVING filtra i gruppi.

Si comporta come quando la parola chiave GROUP BY non viene utilizzata. Le funzioni di gruppo come min, max, avg, sum e count possono apparire in due sole clausole: SELECT e HAVING clausola. Fornisce una condizione sulle tuple corrispondenti a ciascun valore nel gruppo di attributi. L'unico set di record che soddisfa la condizione verrà mostrato come risultato.

Anche qui stiamo prendendo lo stesso esempio della clausola WHERE e considerando la stessa tabella " Vendite ". Quando vogliamo calcolare Total_sales di telefono e altoparlanti utilizzando la clausola HAVING, scriveremo la seguente query.

 SELECT Prodotto, somma (Sales_amount) AS Total_sales FROM Sales GROUP BY Prodotto HAVING Prodotto in ('phone', 'Speakers'); 

La query produce il seguente output in cui i prodotti vengono recuperati per primi, quindi viene eseguita la funzione di aggregazione (somma) e gli ultimi gruppi vengono filtrati a differenza della clausola WHERE.

Quando vogliamo trovare solo quei prodotti in cui Total_sales è maggiore di 1000. La query può essere scritta come:

 SELECT Prodotto, somma (Sales_amount) AS Total_sales FROM Vendite GROUP BY Prodotto HAVING sum (Sales_amount)> 1000; 

L'output prodotto è:

Questo non può essere eseguito utilizzando la clausola WHERE nonostante HAVING e genera un messaggio di errore perché la clausola WHERE non può essere utilizzata con le funzioni di aggregazione.

Differenze chiave tra la clausola Where e Having

  1. La clausola WHERE viene utilizzata nelle operazioni di riga e applicata su una singola riga mentre la clausola HAVING viene utilizzata nelle operazioni di colonna e può essere applicata a righe o gruppi riepilogati.
  2. Nella clausola WHERE, i dati desiderati vengono recuperati in base alla condizione applicata. Al contrario, la clausola HAVING recupera dati interi, quindi la separazione viene eseguita in base alla condizione.
  3. Le funzioni di aggregazione come min, sum, max, avg non possono mai apparire insieme alla clausola WHERE. Per contro, queste funzioni possono essere visualizzate nella clausola HAVING.
  4. La clausola HAVING non può essere utilizzata senza un'istruzione SELECT. Al contrario, DOVE può essere usato con SELECT, UPDATE, DELETE, ecc.
  5. La clausola WHERE si comporta come un pre-filtro mentre la clausola HAVING funge da post-filtro.
  6. La clausola WHERE quando utilizzata con GROUP BY viene prima di GROUP BY. Ciò significa che WHERE filtra le righe prima che vengano eseguiti i calcoli di aggregazione. D'altro canto, HAVING viene dopo GROUP BY, il che significa che filtra dopo aver eseguito i calcoli aggregati.

Conclusione

La clausola WHERE e HAVING funziona allo stesso modo eccetto la funzione aggiuntiva per la quale la clausola HAVING è popolare. La clausola HAVING può funzionare efficacemente con le funzioni di aggregazione mentre WHERE non può essere gestito con funzioni aggregate.

Top