Differenza tra Where e avendo clausola in SQL

Autore: Laura McKinney
Data Della Creazione: 1 Aprile 2021
Data Di Aggiornamento: 1 Maggio 2024
Anonim
WHERE vs Having SQL - Having vs Where clause in proc sql | clause vs having clause #28
Video: WHERE vs Having SQL - Having vs Where clause in proc sql | clause vs having clause #28

Contenuto


WHERE e HAVING sono usati principalmente nell'istruzione delle query SQL, ci consentono di limitare la combinazione nella relazione del risultato usando un predicato specifico. La principale differenza tra WHERE e HAVING è che la clausola WHERE specifica le condizioni per la selezione di tuple (righe) dalle relazioni, comprese le condizioni di partecipazione, se necessario. D'altra parte, la clausola HAVING specifica una condizione su gruppi essere selezionato anziché su singole tuple.

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

  1. Tabella di comparazione
  2. Definizione
  3. Differenze chiave
  4. Conclusione

Tabella di comparazione

Base per il confrontoDOVEVISTA
Di baseImplementato nelle operazioni di riga.Implementato nelle operazioni di colonna.
Applicata aiFila unicaRiga o gruppi riassunti.
Recupero datiRecupera solo i dati particolari da determinate righe in base alla condizione.Inizialmente, i dati completi vengono recuperati, quindi separati in base alla condizione.
Funzioni aggregateImpossibile apparire nella clausola WHERE.Può apparire nella clausola HAVING.
Usato conSELECT e altre istruzioni come UPDATE, DELETE o una di esse.Non può essere utilizzato senza un'istruzione SELECT.
Agire comePre filtroPost-filtro
RAGGRUPPARE PERViene dopo DOVE.Viene prima di AVERE.


Definizione della clausola Where

L'SQL Dove la clausola viene utilizzato per descrivere una condizione al momento del recupero dei dati da una singola tabella o mediante l'unione con più tabelle. Restituisce il valore particolare dalla tabella solo 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 sono anche noti come booleano condizione; la condizione deve essere vera per recuperare le tuple. Gli operandi delle espressioni dei connettivi logici coinvolgono operatori di confronto come <, <=, >, >=, =, e <>. Questi operatori di confronto confrontano stringhe ed espressioni aritmetiche. Può essere utilizzato in SELEZIONARE dichiarazione, nonché in AGGIORNAMENTO, ELIMINA dichiarazioni.


Facciamo un esempio. La tabella mostrata di seguito denominata "I saldi"La tabella è composta da"Prodotto' e 'Ammontare delle vendite"Attributi.

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

SELEZIONA Prodotto, somma (Sales_amount) AS Total_sales DA Sales DOVE Prodotto in (Telefono, Altoparlanti) GROUP BY Product;

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

Definizione di Avere clausola

SQL fornisce Clausola HAVING che può essere usato insieme a RAGGRUPPARE PER clausola. Questa clausola HAVING aiuta a recuperare i valori per i gruppi che soddisfano determinate condizioni. La clausola WHERE può anche essere utilizzata insieme alla clausola HAVING durante la selezione, la clausola WHERE filtra la singola riga. Le righe vengono quindi raggruppate e vengono eseguiti i calcoli aggregati, infine la clausola HAVING filtra i gruppi.

Si comporta come WHERE quando la parola chiave GROUP BY non viene utilizzata. Le funzioni di gruppo come min, max, avg, sum e count possono apparire solo in due clausole: clausola SELECT e HAVING. Fornisce una condizione sulle tuple corrispondente 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 lo stesso "I saldi' tavolo. Quando vogliamo calcolare il Total_sales di telefono e altoparlanti che utilizzano la clausola HAVING, scriveremo la seguente query.

SELEZIONA Prodotto, somma (Sales_amount) AS Total_sales DAL GRUPPO Vendite PER PRODOTTO IN ESAURIMENTO Prodotto in (telefono, altoparlanti);

La query produce il seguente output in cui i prodotti vengono recuperati per primi, quindi viene eseguita la funzione aggregata (somma) e alla fine i gruppi vengono filtrati diversamente dalla clausola WHERE.

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

SELEZIONA Prodotto, somma (Sales_amount) AS Total_sales DAL GRUPPO di vendita PER PRODOTTO SUCCESSO somma (Sales_amount)> 1000;

L'output prodotto è:

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

  1. La clausola WHERE viene utilizzata nelle operazioni sulle righe e applicata su una singola riga mentre la clausola HAVING viene utilizzata nelle operazioni sulle colonne 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 aggregate come min, sum, max, avg non possono mai apparire insieme alla clausola WHERE. Al contrario, queste funzioni possono apparire nella clausola HAVING.
  4. La clausola HAVING non può essere utilizzata senza un'istruzione SELECT. Al contrario, DOVE può essere utilizzato con SELEZIONA, AGGIORNA, ELIMINA, ecc.
  5. La clausola WHERE si comporta come pre-filtro mentre la clausola HAVING funge da post-filtro.
  6. La clausola WHERE se utilizzata con GROUP BY, precede GROUP BY. Ciò significa che WHERE filtra le righe prima che vengano eseguiti i calcoli aggregati. D'altra parte, HAVING viene dopo GROUP BY, il che significa che filtra dopo l'esecuzione dei calcoli aggregati.

Conclusione

Le clausole WHERE e HAVING funzionano allo stesso modo, ad eccezione della funzione aggiuntiva per cui la clausola HAVING è popolare. La clausola HAVING può funzionare in modo efficiente con funzioni aggregate mentre WHERE non può essere utilizzato con funzioni aggregate.