Database
 sql >> Database >  >> RDS >> Database

Come utilizzare la clausola HAVING in SQL

In questo articolo impareremo il concetto di clausola HAVING e come usarlo in SQL.

Cos'è la clausola HAVING?

In Structured Query Language, la clausola HAVING utilizzata con la clausola GROUP BY specifica le condizioni che filtrano i risultati visualizzati nell'output. Restituisce solo i dati del gruppo, che soddisfa le condizioni.

Con la clausola HAVING, possiamo utilizzare la clausola WHERE anche nella query. Se utilizziamo entrambe le clausole insieme, la clausola WHERE verrà eseguita prima dove filtrerà le singole righe, quindi le righe vengono raggruppate e alla fine, la clausola HAVING filtra i gruppi.

Le condizioni della clausola HAVING sono poste dopo la clausola GROUP BY. La clausola HAVING si comportava come la clausola WHERE nel linguaggio di query strutturato non utilizza la clausola GROUP BY. Possiamo utilizzare funzioni aggregate come MIN, MAX, SUM, AVG e COUNT. Questa funzione viene utilizzata solo con la clausola SELECT e la clausola HAVING.

Sintassi della clausola HAVING:

SELECT COLUMNS, AGGREGATE FUNCTION, FROM TABLENAME WHERE CONDITION GROUP BY COLUMN HAVING CONDITIONS; 

Ci sono alcuni passaggi che dobbiamo imparare su come usare la clausola HAVING nella query SQL:

1. Crea un nuovo database o utilizza un database esistente selezionando il database utilizzando la parola chiave USE seguita dal nome del database.

2. Crea una nuova tabella all'interno del database selezionato oppure puoi utilizzare una tabella già creata.

3. Se la tabella viene creata nuova, inserire i record nel database appena creato utilizzando la query INSERT e visualizzare i dati inseriti utilizzando la query SELECT senza la clausola HAVING.

4. Ora siamo pronti per utilizzare la clausola HAVING nelle query SQL.

Passaggio 1:crea un nuovo database o utilizza un database già creato.

Ho già creato un database. Userò il nome del database creato esistente.

USE SCHOOL;

Scuola è il nome del database.

Coloro che non hanno creato un database, seguono la query seguente per creare il database:

CREATE DATABASE database_name;

Dopo aver creato il database, selezionare il database utilizzando la parola chiave USE seguita dal nome del database.

Passaggio 2:crea una nuova tabella o utilizza una tabella già esistente:

Ho già creato una tabella. Userò la tabella esistente denominata Student.

Per creare le nuove tabelle segui la sintassi CREATE TABLE di seguito:

CREATE TABLE table_name(

columnname1 datatype(column size),

columnname2 datatype(column size),

columnname3 datatype(column size)

);

Passaggio 3:inserisci i record nella tabella appena creata utilizzando la query INSERT e visualizza i record utilizzando la query SELECT.

Usa la sintassi di seguito per inserire nuovi record nella tabella:

INSERT INTO table_name VALUES(value1, value2, value3);

Per visualizzare i record dalla tabella utilizzando la sintassi seguente:

SELECT * FROM table_name;

La seguente query visualizzerà i record dei dipendenti

SELECT * FROM Student;

L'output della query SELECT sopra è:

ID_STUDENTE STUDENT_NAME PHYSICS_MARKS CHEMISTRY_MARKS MATHS_MARKS TOTAL_MARKS
1 NEHA 85 88 100 273
2 VISHAL 70 90 82 242
3 SAMKEET 75 88 96 259
4 NICHIL 60 75 80 215
5 YOGESH 56 65 78 199
6 ANKITA 95 85 96 276
7 SONAM 98 89 100 287
8 VIGNETO 85 90 100 275
9 SANKET 86 78 65 229
10 PRACHI 90 80 75 245

Passaggio 4:siamo pronti per utilizzare la clausola HAVING nel linguaggio di query strutturato.

Ora approfondiremo la clausola HAVING con l'aiuto di esempi.

Abbiamo una tabella denominata Student che contiene i seguenti record.

ID_STUDENTE STUDENT_NAME PHYSICS_MARKS CHEMISTRY_MARKS MATHS_MARKS TOTAL_MARKS
1 NEHA 85 88 100 273
2 VISHAL 70 90 82 242
3 SAMKEET 75 88 96 259
4 NICHIL 60 75 80 215
5 YOGESH 56 65 78 199
6 ANKITA 95 85 96 276
7 SONAM 98 89 100 287
8 VIGNETO 85 90 100 275
9 SANKET 86 78 65 229
10 PRACHI 90 80 75 245

Esempio 1: Scrivi una query per visualizzare la somma dei voti di fisica in cui la somma dei voti di fisica è maggiore di 60 gruppi per ID studente.

SELECT STUDENT_ID, STUDENT_NAME, SUM(PHYSICS_MARKS) AS PHYSICS_MARKS FROM STUDENT GROUP BY STUDENT_ID  HAVING SUM(PHYSICS_MARKS) > 60;

Nella query precedente, abbiamo preso una funzione aggregata denominata SUM() seguita dal nome della colonna physics_marks, che sommerà la colonna. Prima Sum(physics_marks) viene eseguita, quindi la condizione della clausola HAVING viene eseguita alla fine e verrà visualizzato il risultato finale. Abbiamo utilizzato la clausola GROUP BY seguita dal nome della colonna Student_Id per raggruppare gli stessi valori e considerarli un gruppo. Se i valori non sono gli stessi, non verrà formato alcun gruppo per i valori. E alla fine, abbiamo utilizzato la clausola HAVING in cui mettiamo la condizione che aiuterà a visualizzare solo quei dettagli dello studente in cui la somma dei voti di fisica è maggiore di 60. Se i voti di fisica degli studenti sono inferiori a 60, non visualizzerà il record.

L'output della query precedente è:

ID_STUDENTE STUDENT_NAME PHYSICS_MARKS
1 NEHA 85
2 VISHAL 70
3 SAMKEET 75
6 ANKITA 95
7 SONAM 98
8 VIGNETO 85
9 SANKET 86
10 PRACHI 90

Come possiamo vedere nell'output, vengono visualizzati solo gli ID studente, i nomi e i voti di fisica in cui la somma dei voti di fisica è maggiore di 60. Poiché abbiamo utilizzato la clausola GROUP BY e nessun valore è simile, vengono conteggiati come un unico gruppo .

Esempio 2: Scrivi una query per visualizzare i voti massimi di voti in chimica dove un punteggio massimo di voti in chimica è inferiore a 90 gruppi per ID studente.

SELECT STUDENT_ID, STUDENT_NAME, MAX(CHEMISTRY_MARKS) AS CHEMISTRY_MARKS FROM STUDENT GROUP BY STUDENT_ID  HAVING MAX(CHEMISTRY_MARKS) < 90;  

Nella query precedente, abbiamo preso una funzione aggregata denominata MAX() seguita dal nome della colonna chemistry_marks, che troverà i segni massimi della colonna. Abbiamo utilizzato la clausola GROUP BY seguita dal nome della colonna Student_Id per raggruppare gli stessi valori e considerarli un gruppo. Se i valori non sono gli stessi, verrà formato un gruppo separato per i valori. E alla fine, abbiamo utilizzato la clausola HAVING in cui mettiamo la condizione che aiuterà a visualizzare solo quei dettagli dello studente in cui il voto massimo dei voti in chimica è inferiore a 90. Se i voti in chimica degli studenti sono maggiori di 90, non lo farà visualizzare i record. Innanzitutto, viene eseguito MAX(chemistry_marks), quindi la condizione della clausola HAVING viene eseguita alla fine e verrà visualizzato il risultato finale. L'output della query precedente è:

ID_STUDENTE STUDENT_NAME CHEMISTRY_MARKS
1 NEHA 88
3 SAMKEET 88
4 NICHIL 75
5 YOGESH 65
6 ANKITA 85
7 SONAM 89
9 SANKET 78
10 PRACHI 80

Come possiamo vedere nell'output, vengono visualizzati solo gli ID studente, i nomi e i voti di chimica in cui il voto massimo dei voti di chimica è inferiore a 90. Poiché abbiamo utilizzato la clausola GROUP BY e nessun valore è simile, vengono conteggiati come un singolo gruppo.

Esempio 3: Scrivi una query per visualizzare i voti di matematica in cui un voto minimo di voti in matematica è maggiore di 70 gruppi per ID studente.

SELECT STUDENT_ID, STUDENT_NAME, MIN(MATHS_MARKS) AS MATHS_MARKS FROM STUDENT GROUP BY STUDENT_ID  HAVING MIN(MATHS_MARKS) >70;

Nella query precedente, abbiamo preso una funzione aggregata denominata MIN() seguita dal nome della colonna maths_marks, che troverà i segni minimi della colonna. Abbiamo utilizzato la clausola GROUP BY seguita dal nome della colonna Student_Id per raggruppare gli stessi valori e considerarli un gruppo. Se i valori non sono gli stessi, verrà formato un gruppo separato per i valori. E alla fine, abbiamo utilizzato la clausola HAVING in cui mettiamo la condizione che aiuterà a visualizzare solo quei dettagli dello studente in cui il voto minimo dei voti in matematica è maggiore di 70. Se i voti in matematica dello studente sono inferiori a 70, non lo farà visualizzare i record. Innanzitutto, viene eseguito MIN(maths_marks), quindi viene eseguita la condizione della clausola HAVING alla fine e verrà visualizzato il risultato finale.

L'output della query precedente è:

ID_STUDENTE STUDENT_NAME MATHS_MARKS
1 NEHA 100
2 VISHAL 82
3 SAMKEET 96
4 NICHIL 80
5 YOGESH 78
6 ANKITA 96
7 SONAM 100
8 VIGNETO 100
10 PRACHI 75

Come possiamo vedere nell'output, vengono visualizzati solo gli ID studente, i nomi e i voti matematici in cui il voto minimo dei voti matematici è maggiore di 70. Poiché abbiamo utilizzato la clausola GROUP BY e nessun valore è simile, vengono conteggiati come un singolo gruppo.

Esempio 4: Scrivi una query per visualizzare i dettagli degli studenti in cui i voti minimi in fisica sono maggiori di 56 E i voti massimi in matematica sono inferiori a 98.

SELECT STUDENT_ID, STUDENT_NAME, MIN(PHYSICS_MARKS) AS PHYSICS_MARKS , MAX(MATHS_MARKS) AS MATHS_MARKS FROM STUDENT GROUP BY STUDENT_ID HAVING MIN(PHYSICS_MARKS) >58 AND MAX(MATHS_MARKS)<98;

Abbiamo usato funzioni di doppia aggregazione in una singola query min() e max() nella query precedente. Min() viene utilizzato per scoprire i voti minimi della fisica e Max() viene utilizzato per scoprire i voti massimi in matematica. Innanzitutto, la query troverà i segni min() e max() della fisica e della matematica dalla tabella degli studenti. Poiché abbiamo utilizzato la clausola GROUP BY, quindi valori simili mappati come un gruppo, altrimenti i valori saranno separati. Poiché nessun valore è simile nella tabella, tutti i valori sono separati. Nessun valore verrà mappato come un gruppo. Successivamente, abbiamo utilizzato la clausola HAVING, che funziona come differenza tra la clausola WHERE solo la clausola HAVING mappata nel gruppo. Innanzitutto, la condizione è MIN(PHYSICS_MARKS)> 58. Poiché nessun valore è simile, ogni valore verrà considerato come valore minimo e, confrontato con la condizione, viene utilizzato lo stesso approccio per MAX(MATHS_MARKS). Poiché abbiamo utilizzato l'operatore AND nella query, tali condizioni soddisfano entrambe le condizioni. Solo i record di quegli studenti vengono visualizzati nell'output finale.

L'output della query precedente è:

ID_STUDENTE STUDENT_NAME PHYSICS_MARKS MATHS_MARKS
2 VISHAL 70 82
3 SAMKEET 75 96
4 NICHIL 60 80
6 ANKITA 95 96
9 SANKET 86 65
10 PRACHI 90 75

Come possiamo vedere nell'output, vengono visualizzati solo i record degli studenti in cui i voti minimi dei valori di fisica sono maggiori di 56 E i voti massimi di matematica sono inferiori a 98.

Nell'esempio precedente, se viene utilizzato l'operatore OR invece dell'operatore AND, vengono visualizzati tutti i dieci record perché l'operatore OR dice che se una condizione non riesce e altre condizioni sono vere, i record della tabella soddisfano le condizioni.