


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:
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
Enthält 10 Datenzeilen mit ID- und Wertwerten im Bereich von 1 bis 10.
Abfrage:
SELECT `value` v FROM `table` WHERE `value`>5; -- 获取 5 行 SELECT `value` v FROM `table` HAVING `value`>5; -- 获取 5 行
Ergebnis:
Beide Abfragen liefern die gleichen Ergebnisse, was zeigt, dass die HAVING-Klausel ohne die GROUP BY-Klausel funktionieren kann.
ERKLÄREN:
EXPLAIN SELECT `value` v FROM `table` WHERE `value`>5;
<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>
EXPLAIN SELECT `value` v FROM `table` having `value`>5;
<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!

In dem Artikel werden mithilfe der Änderungstabelle von MySQL Tabellen, einschließlich Hinzufügen/Löschen von Spalten, Umbenennung von Tabellen/Spalten und Ändern der Spaltendatentypen, erläutert.

In Artikel werden die Konfiguration der SSL/TLS -Verschlüsselung für MySQL, einschließlich der Erzeugung und Überprüfung von Zertifikaten, erläutert. Das Hauptproblem ist die Verwendung der Sicherheitsauswirkungen von selbstsignierten Zertifikaten. [Charakterzahl: 159]

In Artikel werden Strategien zum Umgang mit großen Datensätzen in MySQL erörtert, einschließlich Partitionierung, Sharding, Indexierung und Abfrageoptimierung.

In Artikel werden beliebte MySQL -GUI -Tools wie MySQL Workbench und PhpMyAdmin beschrieben, die ihre Funktionen und ihre Eignung für Anfänger und fortgeschrittene Benutzer vergleichen. [159 Charaktere]

In dem Artikel werden in MySQL die Ablagerung von Tabellen mithilfe der Drop -Tabellenerklärung erörtert, wobei Vorsichtsmaßnahmen und Risiken betont werden. Es wird hervorgehoben, dass die Aktion ohne Backups, die Detaillierung von Wiederherstellungsmethoden und potenzielle Produktionsumfeldgefahren irreversibel ist.

In dem Artikel werden in verschiedenen Datenbanken wie PostgreSQL, MySQL und MongoDB Indizes für JSON -Spalten in verschiedenen Datenbanken erstellt, um die Abfrageleistung zu verbessern. Es erläutert die Syntax und die Vorteile der Indizierung spezifischer JSON -Pfade und listet unterstützte Datenbanksysteme auf.

In Artikeln werden ausländische Schlüssel zur Darstellung von Beziehungen in Datenbanken erörtert, die sich auf Best Practices, Datenintegrität und gemeinsame Fallstricke konzentrieren.

Artikel erläutert die Sicherung von MySQL gegen SQL-Injektions- und Brute-Force-Angriffe unter Verwendung vorbereiteter Aussagen, Eingabevalidierung und starken Kennwortrichtlinien (159 Zeichen).


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

SublimeText3 Linux neue Version
SublimeText3 Linux neueste Version

Herunterladen der Mac-Version des Atom-Editors
Der beliebteste Open-Source-Editor

ZendStudio 13.5.1 Mac
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

VSCode Windows 64-Bit-Download
Ein kostenloser und leistungsstarker IDE-Editor von Microsoft