Heim >Datenbank >MySQL-Tutorial >MySQL-Abfragen: WHERE vs. HAVING – Wann sollte ich HAVING für benutzerdefinierte Spalten verwenden?

MySQL-Abfragen: WHERE vs. HAVING – Wann sollte ich HAVING für benutzerdefinierte Spalten verwenden?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-19 22:32:14570Durchsuche

MySQL Queries: WHERE vs. HAVING – When Should I Use HAVING for Custom Columns?

Position benutzerdefinierter Spalten in MySQL-Abfragen: WHERE und HAVING

Frage:

Warum müssen die in der SELECT-Anweisung erstellten Spalten nach der HAVING-Klausel und nicht nach der WHERE-Klausel in MySQL platziert werden? Gibt es auch Nachteile bei der Verwendung von WHERE 1 anstelle der Angabe der vollständigen Definition der Spalte?

Antwort:

Während andere Antworten dieses Thema angesprochen haben, sind die wichtigsten Unterschiede wie folgt:

WHERE-Klausel: Filtert Daten vor der Auswahl und lässt jede Tabellenspalte zu. Es können keine Aliase oder Aggregatfunktionen verwendet werden.

HAVING-Klausel: Filtert Daten nach der Auswahl und ermöglicht die Verwendung ausgewählter Spalten, Aliase oder Aggregatfunktionen.

Standort:

Benutzerdefinierte Spalten sollten nach der HAVING-Klausel platziert werden, weil:

  • HAVING filtert ausgewählte Ergebnisdaten, einschließlich benutzerdefinierter Spalten.
  • WHERE filtert die Ergebnisdaten vor der Auswahl, ausgenommen benutzerdefinierte Spalten.

Effizienz:

Zum Filtern großer Datensätze ist die Verwendung der WHERE-Klausel effizienter, da sie irrelevante Zeilen eliminiert, bevor die Auswahl durchgeführt wird.

Beispiel:

Betrachten Sie das folgende Formular:

<code class="language-sql">CREATE TABLE `table` (
 `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
 `value` int(10) unsigned NOT NULL,
 PRIMARY KEY (`id`),
 KEY `value` (`value`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8</code>

Enthält 10 Datenzeilen mit ID- und Wertwerten im Bereich von 1 bis 10.

Abfrage:

<code class="language-sql">SELECT `value` v FROM `table` WHERE `value`>5; -- 获取 5 行
SELECT `value` v FROM `table` HAVING `value`>5; -- 获取 5 行</code>

Ergebnis:

Beide Abfragen liefern die gleichen Ergebnisse, was zeigt, dass die HAVING-Klausel ohne die GROUP BY-Klausel funktionieren kann.

ERKLÄREN:

<code class="language-sql">EXPLAIN SELECT `value` v FROM `table` WHERE `value`>5;</code>
<code>+----+-------------+-------+-------+---------------+-------+---------+------+------+--------------------------+
| id | select_type | table | type  | possible_keys | key   | key_len | ref  | rows | Extra                    |
+----+-------------+-------+-------+---------------+-------+---------+------+------+--------------------------+
|  1 | SIMPLE      | table | range | value         | value | 4       | NULL |    5 | Using where; Using index |
+----+-------------+-------+-------+---------------+-------+---------+------+------+--------------------------+</code>
<code class="language-sql">EXPLAIN SELECT `value` v FROM `table` having `value`>5;</code>
<code>+----+-------------+-------+-------+---------------+-------+---------+------+------+-------------+
| id | select_type | table | type  | possible_keys | key   | key_len | ref  | rows | Extra       |
+----+-------------+-------+-------+---------------+-------+---------+------+------+-------------+
|  1 | SIMPLE      | table | index | NULL          | value | 4       | NULL |   10 | Using index |
+----+-------------+-------+-------+---------------+-------+---------+------+------+-------------+</code>

Wie Sie sehen können, verwenden sowohl WHERE als auch HAVING Indizes, aber die Anzahl der zurückgegebenen Zeilen ist unterschiedlich. WHERE filtert die Daten vor der Auswahl und reduziert so die Anzahl der Zeilen, während HAVING die Zeilen nach der Auswahl filtert.

Fazit:

  • Fügen Sie benutzerdefinierte Spalten nach der HAVING-Klausel ein, um ausgewählte Daten zu filtern.
  • Verwenden Sie die WHERE-Klausel, um große Datensätze effizient zu filtern, indem Sie irrelevante Zeilen ausschließen.

Das obige ist der detaillierte Inhalt vonMySQL-Abfragen: WHERE vs. HAVING – Wann sollte ich HAVING für benutzerdefinierte Spalten verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn