In diesem Artikel lernen wir das Konzept der HAVING-Klausel kennen und wie man es in SQL verwendet.
Was ist die HAVING-Klausel?
In der strukturierten Abfragesprache gibt die mit der GROUP BY-Klausel verwendete HAVING-Klausel die Bedingungen an, die die in der Ausgabe erscheinenden Ergebnisse filtern. Es werden nur die Daten aus der Gruppe zurückgegeben, die die Bedingungen erfüllen.
Mit der HAVING-Klausel können wir die WHERE-Klausel auch in der Abfrage verwenden. Wenn wir beide Klauseln zusammen verwenden, wird die WHERE-Klausel zuerst ausgeführt, wo sie die einzelnen Zeilen filtert, dann werden die Zeilen gruppiert und am Ende filtert die HAVING-Klausel die Gruppen.
Bedingungen der HAVING-Klausel werden nach der GROUP BY-Klausel platziert. Die HAVING-Klausel hat sich wie die WHERE-Klausel in der Structured Query Language verhalten und verwendet nicht die GROUP BY-Klausel. Wir können Aggregatfunktionen wie MIN, MAX, SUM, AVG und COUNT verwenden. Diese Funktion wird nur mit der SELECT-Klausel und der HAVING-Klausel verwendet.
Syntax der HAVING-Klausel:
SELECT COLUMNS, AGGREGATE FUNCTION, FROM TABLENAME WHERE CONDITION GROUP BY COLUMN HAVING CONDITIONS;
Es gibt einige Schritte, die wir lernen müssen, um die HAVING-Klausel in der SQL-Abfrage zu verwenden:
1. Erstellen Sie eine neue Datenbank oder verwenden Sie eine vorhandene Datenbank, indem Sie die Datenbank mit dem Schlüsselwort USE gefolgt vom Datenbanknamen auswählen.
2. Erstellen Sie eine neue Tabelle in der ausgewählten Datenbank oder verwenden Sie eine bereits erstellte Tabelle.
3. Wenn die Tabelle neu erstellt wird, fügen Sie die Datensätze mit der INSERT-Abfrage in die neu erstellte Datenbank ein und zeigen Sie die eingefügten Daten mit der SELECT-Abfrage ohne die HAVING-Klausel an.
4. Jetzt können wir die HAVING-Klausel in den SQL-Abfragen verwenden.
Schritt 1:Erstellen Sie eine neue Datenbank oder verwenden Sie eine bereits erstellte Datenbank.
Ich habe bereits eine Datenbank erstellt. Ich werde meinen vorhandenen erstellten Datenbanknamen verwenden.
USE SCHOOL;
Schule ist der Datenbankname.
Diejenigen, die keine Datenbank erstellt haben, folgen der folgenden Abfrage, um die Datenbank zu erstellen:
CREATE DATABASE database_name;
Nachdem Sie die Datenbank erstellt haben, wählen Sie die Datenbank mit dem Schlüsselwort USE gefolgt vom Datenbanknamen aus.
Schritt 2:Erstellen Sie eine neue Tabelle oder verwenden Sie eine bereits vorhandene Tabelle:
Ich habe bereits eine Tabelle erstellt. Ich werde die vorhandene Tabelle namens Student.
verwendenUm die neuen Tabellen zu erstellen, folgen Sie der CREATE TABLE-Syntax:
CREATE TABLE table_name(
columnname1 datatype(column size),
columnname2 datatype(column size),
columnname3 datatype(column size)
);
Schritt 3:Fügen Sie die Datensätze mit der INSERT-Abfrage in die neu erstellte Tabelle ein und zeigen Sie die Datensätze mit der SELECT-Abfrage an.
Verwenden Sie die folgende Syntax, um neue Datensätze in die Tabelle einzufügen:
INSERT INTO table_name VALUES(value1, value2, value3);
Um die Datensätze aus der Tabelle mit der folgenden Syntax anzuzeigen:
SELECT * FROM table_name;
Die folgende Abfrage zeigt die Datensätze der Mitarbeiter an
SELECT * FROM Student;
Die Ausgabe der obigen SELECT-Abfrage ist:
STUDENT_ID | 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 | VINEET | 85 | 90 | 100 | 275 |
9 | SANKET | 86 | 78 | 65 | 229 |
10 | PRACHI | 90 | 80 | 75 | 245 |
Schritt 4:Wir sind bereit, die HAVING-Klausel in der Structured Query Language zu verwenden.
Wir werden nun anhand von Beispielen tief in die HAVING-Klausel eintauchen.
Wir haben eine Tabelle namens Student, die die folgenden Datensätze enthält.
STUDENT_ID | 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 | VINEET | 85 | 90 | 100 | 275 |
9 | SANKET | 86 | 78 | 65 | 229 |
10 | PRACHI | 90 | 80 | 75 | 245 |
Beispiel 1: Schreiben Sie eine Abfrage, um die Summe der Physiknoten anzuzeigen, wenn die Summe der Physiknoten größer als 60 Gruppen nach Schüler-ID ist.
SELECT STUDENT_ID, STUDENT_NAME, SUM(PHYSICS_MARKS) AS PHYSICS_MARKS FROM STUDENT GROUP BY STUDENT_ID HAVING SUM(PHYSICS_MARKS) > 60;
In der obigen Abfrage haben wir eine Aggregatfunktion namens SUM() gefolgt vom Spaltennamen physical_marks genommen, der die Spalte summiert. Zuerst wird Sum(physics_marks) ausgeführt, dann wird am Ende die Bedingung der HAVING-Klausel ausgeführt und das Endergebnis wird angezeigt. Wir haben die GROUP BY-Klausel gefolgt vom Spaltennamen Student_Id verwendet, um dieselben Werte zu gruppieren und sie als eine Gruppe zu betrachten. Wenn Werte nicht gleich sind, wird keine Gruppe für Werte gebildet. Und am Ende haben wir die HAVING-Klausel verwendet, in der wir die Bedingung eingefügt haben, die hilft, nur die Schülerdetails anzuzeigen, bei denen die Summe der Physiknoten größer als 60 ist. Wenn die Physiknoten der Schüler kleiner als 60 sind, wird sie nicht angezeigt Aufzeichnungen.
Die Ausgabe der obigen Abfrage ist:
STUDENT_ID | STUDENT_NAME | PHYSICS_MARKS |
1 | NEHA | 85 |
2 | VISHAL | 70 |
3 | SAMKEET | 75 |
6 | ANKITA | 95 |
7 | SONAM | 98 |
8 | VINEET | 85 |
9 | SANKET | 86 |
10 | PRACHI | 90 |
Wie wir in der Ausgabe sehen können, werden nur die Schüler-IDs, Namen und Physiknoten angezeigt, bei denen die Summe der Physiknoten größer als 60 ist. Da wir die GROUP BY-Klausel verwendet haben und keine Werte ähnlich sind, werden sie als eine einzelne Gruppe gezählt .
Beispiel 2: Schreiben Sie eine Abfrage, um die Höchstpunktzahl von Chemienoten anzuzeigen, wenn eine Höchstpunktzahl von Chemienoten weniger als 90 Gruppen nach Schüler-ID beträgt.
SELECT STUDENT_ID, STUDENT_NAME, MAX(CHEMISTRY_MARKS) AS CHEMISTRY_MARKS FROM STUDENT GROUP BY STUDENT_ID HAVING MAX(CHEMISTRY_MARKS) < 90;
In der obigen Abfrage haben wir eine Aggregatfunktion namens MAX() gefolgt vom Spaltennamen chemistry_marks genommen, die die maximalen Markierungen der Spalte finden wird. Wir haben die GROUP BY-Klausel gefolgt vom Spaltennamen Student_Id verwendet, um dieselben Werte zu gruppieren und sie als eine Gruppe zu betrachten. Wenn die Werte nicht gleich sind, wird eine eigene Gruppe für Werte gebildet. Und am Ende haben wir die HAVING-Klausel verwendet, in der wir die Bedingung gesetzt haben, die dazu beiträgt, dass nur die Studentendetails angezeigt werden, bei denen die Höchstpunktzahl der Chemienoten weniger als 90 beträgt. Wenn die Chemienoten der Studenten größer als 90 sind, wird dies nicht der Fall sein die Aufzeichnungen anzeigen. Zuerst wird MAX(chemistry_marks) ausgeführt, dann wird am Ende die Bedingung der HAVING-Klausel ausgeführt und das Endergebnis wird angezeigt. Die Ausgabe der obigen Abfrage ist:
STUDENT_ID | 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 |
Wie wir in der Ausgabe sehen können, werden nur die Schüler-IDs, Namen und Chemienoten angezeigt, bei denen die maximale Punktzahl der Chemienoten weniger als 90 beträgt. Da wir die GROUP BY-Klausel verwendet haben und keine Werte ähnlich sind, werden sie als einzelne gezählt Gruppe.
Beispiel 3: Schreiben Sie eine Abfrage, um die Mathematiknoten anzuzeigen, wenn eine Mindestnote von Mathematiknoten größer als 70 Gruppen nach Schüler-ID ist.
SELECT STUDENT_ID, STUDENT_NAME, MIN(MATHS_MARKS) AS MATHS_MARKS FROM STUDENT GROUP BY STUDENT_ID HAVING MIN(MATHS_MARKS) >70;
In der obigen Abfrage haben wir eine Aggregatfunktion namens MIN() gefolgt vom Spaltennamen maths_marks genommen, die die Mindestmarkierungen der Spalte finden wird. Wir haben die GROUP BY-Klausel gefolgt vom Spaltennamen Student_Id verwendet, um dieselben Werte zu gruppieren und sie als eine Gruppe zu betrachten. Wenn die Werte nicht gleich sind, wird eine eigene Gruppe für Werte gebildet. Und am Ende haben wir die HAVING-Klausel verwendet, in der wir die Bedingung eingefügt haben, die dazu beiträgt, dass nur die Schülerdetails angezeigt werden, bei denen die Mindestpunktzahl der Mathematiknoten größer als 70 ist. Wenn die Mathematiknoten des Schülers kleiner als 70 sind, wird dies nicht der Fall sein die Aufzeichnungen anzeigen. Zuerst wird MIN(maths_marks) ausgeführt, dann wird am Ende die Bedingung der HAVING-Klausel ausgeführt und das Endergebnis wird angezeigt.
Die Ausgabe der obigen Abfrage ist:
STUDENT_ID | 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 | VINEET | 100 |
10 | PRACHI | 75 |
Wie wir in der Ausgabe sehen können, werden nur die Schüler-IDs, Namen und mathematischen Noten angezeigt, bei denen die Mindestnote der mathematischen Noten größer als 70 ist. Da wir die GROUP BY-Klausel verwendet haben und keine Werte ähnlich sind, werden sie als einzelne gezählt Gruppe.
Beispiel 4: Schreiben Sie eine Abfrage, um Schülerdetails anzuzeigen, bei denen die Mindestnoten für Physik größer als 56 UND die Höchstnoten für Mathematik kleiner als 98 sind.
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;
Wir haben doppelte Aggregatfunktionen in einer einzigen Abfrage min() und max() in der obigen Abfrage verwendet. Min() wird verwendet, um die minimalen Noten der Physik herauszufinden, und Max() wird verwendet, um die maximalen mathematischen Noten herauszufinden. Zuerst findet die Abfrage die min()- und max()-Markierungen von Physik und Mathematik aus der Schülertabelle. Da wir die GROUP BY-Klausel verwendet haben, werden ähnliche Werte als eine Gruppe zugeordnet, andernfalls werden die Werte getrennt. Da in der Tabelle keine Werte ähnlich sind, haben sich alle Werte getrennt. Es werden keine Werte als eine Gruppe zugeordnet. Als nächstes haben wir die HAVING-Klausel verwendet, die als Unterschied zwischen der WHERE-Klausel funktioniert und nur die HAVING-Klausel der Gruppe zugeordnet hat. Erstens ist die Bedingung MIN(PHYSICS_MARKS)> 58. Da keine Werte ähnlich sind, wird jeder Wert als Mindestwert betrachtet, und verglichen mit der Bedingung wird der gleiche Ansatz für MAX(MATHS_MARKS) verwendet. Da wir den UND-Operator in der Abfrage verwendet haben, erfüllen diese Bedingungen beide Bedingungen. Nur die Aufzeichnungen dieser Schüler werden in der endgültigen Ausgabe angezeigt.
Die Ausgabe der obigen Abfrage ist:
STUDENT_ID | 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 |
Wie wir in der Ausgabe sehen können, werden nur die Schülerdatensätze angezeigt, bei denen die Mindestnoten für Physikwerte größer als 56 UND die Höchstnoten für Mathematik kleiner als 98 sind.
Wenn im obigen Beispiel der OR-Operator anstelle des AND-Operators verwendet wird, werden alle zehn Datensätze angezeigt, da der OR-Operator besagt, dass die Tabellendatensätze die Bedingungen erfüllen, wenn eine Bedingung fehlschlägt und andere Bedingungen wahr sind.