In MySQL muss das Schlüsselwort „have“ zusammen mit der SELECT-Anweisung verwendet werden, um die gruppierten Daten zu filtern. Die Syntax lautet „SELECT {*|Feldspaltenname} FROM Datentabellenname HAVING Abfragebedingung;“.
Die Betriebsumgebung dieses Tutorials: Windows7-System, MySQL8-Version, Dell G3-Computer.
In MySQL können Sie das Schlüsselwort HAVING verwenden, um gruppierte Daten zu filtern.
Das Syntaxformat für die Verwendung des Schlüsselworts HAVING lautet wie folgt:
HAVING 查询条件;
Sowohl das Schlüsselwort HAVING als auch das Schlüsselwort WHERE können zum Filtern von Daten verwendet werden, und HAVING unterstützt alle Operatoren und Syntax im Schlüsselwort WHERE.
Aber es gibt auch die folgenden Unterschiede zwischen den Schlüsselwörtern WHERE und HAVING:
Im Allgemeinen wird WHERE zum Filtern von Datenzeilen verwendet, während HAVING zum Filtern von Gruppen verwendet wird.
Aggregationsfunktionen können nicht in WHERE-Abfragebedingungen verwendet werden, Aggregatfunktionen können jedoch in HAVING-Abfragebedingungen verwendet werden.
WHERE filtert vor der Datengruppierung, während HAVING Filter nach der Datengruppierung erfolgt.
WHERE filtert die Datenbankdateien, während HAVING die Abfrageergebnisse filtert. Mit anderen Worten: WHERE filtert direkt auf Grundlage der Felder in der Datentabelle, während HAVING auf Grundlage der zuvor abgefragten Felder filtert.
WHERE-Abfragebedingungen können keine Feldaliase verwenden, HAVING-Abfragebedingungen können jedoch Feldaliase verwenden.
Die folgenden Beispiele vermitteln Ihnen ein intuitiveres Verständnis der Ähnlichkeiten und Unterschiede zwischen den Schlüsselwörtern WHERE und HAVING.
Beispiel 1
Verwenden Sie die Schlüsselwörter HAVING bzw. WHERE, um in der Tabelle tb_students_info die Namen, das Geschlecht und die Größe von Schülern abzufragen, deren Größe größer als 150 ist. Die SQL-Anweisungen und Ausführungsergebnisse lauten wie folgt.
mysql> SELECT name,sex,height FROM tb_students_info -> HAVING height>150; +--------+------+--------+ | name | sex | height | +--------+------+--------+ | Dany | 男 | 160 | | Green | 男 | 158 | | Henry | 女 | 185 | | Jane | 男 | 162 | | Jim | 女 | 175 | | John | 女 | 172 | | Lily | 男 | 165 | | Susan | 男 | 170 | | Thomas | 女 | 178 | | Tom | 女 | 165 | +--------+------+--------+ 10 rows in set (0.00 sec) mysql> SELECT name,sex,height FROM tb_students_info -> WHERE height>150; +--------+------+--------+ | name | sex | height | +--------+------+--------+ | Dany | 男 | 160 | | Green | 男 | 158 | | Henry | 女 | 185 | | Jane | 男 | 162 | | Jim | 女 | 175 | | John | 女 | 172 | | Lily | 男 | 165 | | Susan | 男 | 170 | | Thomas | 女 | 178 | | Tom | 女 | 165 | +--------+------+--------+ 10 rows in set (0.00 sec)
Da im obigen Beispiel das Höhenfeld nach dem Schlüsselwort SELECT abgefragt wurde, können sowohl HAVING als auch WHERE verwendet werden. Wenn das Höhenfeld jedoch nicht nach dem Schlüsselwort SELECT abgefragt wird, meldet MySQL einen Fehler.
Beispiel 2
Verwenden Sie die Schlüsselwörter HAVING und WHERE, um die Namen und Geschlechter von Schülern abzufragen, deren Körpergröße mehr als 150 in der Tabelle tb_students_info beträgt (im Vergleich zu Beispiel 1 wird das Feld „Größe“ dieses Mal nicht abgefragt). Die SQL-Anweisungen und Ausführungsergebnisse lauten wie folgt.
mysql> SELECT name,sex FROM tb_students_info -> WHERE height>150; +--------+------+ | name | sex | +--------+------+ | Dany | 男 | | Green | 男 | | Henry | 女 | | Jane | 男 | | Jim | 女 | | John | 女 | | Lily | 男 | | Susan | 男 | | Thomas | 女 | | Tom | 女 | +--------+------+ 10 rows in set (0.00 sec) mysql> SELECT name,sex FROM tb_students_info HAVING height>150; ERROR 1054 (42S22): Unknown column 'height' in 'having clause'
Aus den Ergebnissen geht hervor, dass MySQL eine Fehlermeldung ausgibt, wenn das in der HAVING-Abfragebedingung verwendete Höhenfeld nicht nach dem Schlüsselwort SELECT abgefragt wird: Die Spalte „Höhe“ in der „Having-Klausel“ ist unbekannt. .
Beispiel 3
Gruppieren Sie die Daten in der Tabelle tb_students_info entsprechend dem Größenfeld und verwenden Sie die Schlüsselwörter HAVING und WHERE, um die Namen, Geschlechter und Größen der Schüler abzufragen, deren durchschnittliche Größe größer als 170 ist. Die SQL Die Ergebnisse der Anweisung und der Ausführung lauten wie folgt
mysql> SELECT GROUP_CONCAT(name),sex,height FROM tb_students_info -> GROUP BY height -> HAVING AVG(height)>170; +--------------------+------+--------+ | GROUP_CONCAT(name) | sex | height | +--------------------+------+--------+ | John | 女 | 172 | | Jim | 女 | 175 | | Thomas | 女 | 178 | | Henry | 女 | 185 | +--------------------+------+--------+ 4 rows in set (0.00 sec) mysql> SELECT GROUP_CONCAT(name),sex,height FROM tb_students_info WHERE AVG(height)>170 GROUP BY height; ERROR 1111 (HY000): Invalid use of group function
Aus den Ergebnissen geht hervor, dass MySQL eine Fehlermeldung ausgibt: Ungültige Verwendung der Gruppenfunktion
[Zugehörige Empfehlung: MySQL-Video-Tutorial]
Das obige ist der detaillierte Inhalt vonSo verwenden Sie das MySQL-Schlüsselwort have. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!