Where vs Having in MySQL
-
WHERE
vs.HAVING
in MySQL -
die
WHERE
-Klausel in MySQL -
die
HAVING
-Klausel in MySQL -
Unterschiede zwischen den Klauseln
WHERE
undHAVING
in MySQL
Heute lernen wir die Unterschiede zwischen den Klauseln WHERE
und HAVING
in MySQL kennen. Wir werden die Klauseln einzeln mit Codebeispielen verstehen und tabellarisch gegenüberstellen, um die Unterschiede hervorzuheben.
WHERE
vs. HAVING
in MySQL
Die Klauseln WHERE
und HAVING
sind ziemlich ähnlich. Der Hauptunterschied zwischen diesen Klauseln tritt auf, wenn sie mit GROUP BY
verwendet werden.
Wir können die WHERE
-Klausel nicht mit aggregierten Daten verwenden, aber HAVING
kann verwendet werden.
Wir können sagen, dass WHERE
die Datensätze (Zeilen) vor der Gruppierung filtert, aber die HAVING
-Klausel die Datensätze (Zeilen) nach der Gruppierung ausschließt.
Um Schritt für Schritt mit diesem Artikel fortzufahren, sollten wir eine Tabelle haben.
Erstellen Sie also eine Tabelle transactions
mit vier Attributen namens ID
, Product
, MonthOfTransaction
und AmountInUSD
.
Beispielcode:
#create a table
CREATE TABLE `ms20`.`transactions` (
`ID` INT NOT NULL AUTO_INCREMENT,
`Product` VARCHAR(45) NOT NULL,
`MonthOfTransaction` VARCHAR(20) NOT NULL,
`AmountInUSD` INT NOT NULL,
PRIMARY KEY (`ID`));
#insert data into a table
INSERT INTO ms20.transactions(Product, MonthOfTransaction, AmountInUSD) VALUES
('Air Conditioner', 'January', 500),
('Television', 'January', 600),
('Refrigerator', 'January', 550),
('Television', 'March', 600),
('Air Conditioner', 'March', 500),
('Juicer Machine', 'March', 200);
#select all data from the table
SELECT * FROM ms20.transactions;
Ausgabe:
die WHERE
-Klausel in MySQL
In MySQL verwenden wir die WHERE
-Klausel, um die Datensätze zu filtern und nur die Zeilen (Datensätze) zu extrahieren, die die angegebene Bedingung erfüllen. Wir können es mit SELECT
-Anweisungen und den UPDATE
-, INSERT
- und DELETE
-Befehlen verwenden.
Die WHERE
-Klausel betrifft eine bestimmte Bedingung, die den ausgewählten Spalten beim Abrufen von Datensätzen aus einzelnen oder mehreren Tabellen unter Verwendung der JOIN
-Klausel auferlegt wird. Wir können in der WHERE
-Klausel logische Operationen durchführen, zum Beispiel AND
, NOT
, OR
.
Wir können sie auch boolesche Bedingungen nennen, die beim Abrufen der Informationen aus der Tabelle (auch Relation genannt) true
sein müssen. Diese logischen Operatoren verwenden Vergleichsoperatoren, darunter <
, >
, <=
, >=
, =
und <>
.
Beispielcode:
SELECT Product, sum(AmountInUSD) AS Total
FROM ms20.transactions
WHERE Product in ( 'Television', 'Refrigerator')
GROUP BY Product;
Ausgabe:
die HAVING
-Klausel in MySQL
In MySQL wird die HAVING
-Klausel mit der GROUP BY
-Klausel kombiniert. Das Ziel der Verwendung dieser Klausel besteht darin, Spaltenoperationen durchzuführen und auf aggregierte Daten oder Gruppen gemäß den angegebenen Bedingungen anzuwenden.
Die HAVING
-Klausel gibt nur die Ergebnisse von Gruppen zurück, die eine bestimmte Bedingung erfüllen. Wenn die Klauseln WHERE
und HAVING
zusammen verwendet werden, filtert das WHERE
die einzelnen Datensätze (Zeilen).
Dann werden die Datensätze (Zeilen) gruppiert, die aggregierten Berechnungen durchgeführt und schließlich filtert HAVING
die Gruppen. Die HAVING
-Klausel prüft den Zustand der Gruppen, die die GROUP BY
-Klausel erstellt hat.
Ohne die GROUP BY
-Klausel verhält sich die HAVING
-Klausel wie die WHERE
-Klausel.
Wir können auch verschiedene Aggregatfunktionen verwenden, indem wir die HAVING
-Klausel mit der SELECT
-Anweisung kombinieren. Die aggregierten (Gruppen-)Methoden beinhalten SUM
, MAX
, MIN
, COUNT
und AVG
.
Wir können die Aggregatfunktionen problemlos mit der Klausel HAVING
verwenden, während wir bei Verwendung mit der Klausel WHERE
einen Fehler als invalid use of group function
erhalten.
Beispielcode (ohne Aggregatfunktion):
SELECT Product, sum(AmountInUSD) AS Total
FROM ms20.transactions
GROUP BY Product
HAVING Product in ('Television', 'Refrigerator');
Ausgabe:
Beispielcode (mit Aggregatfunktion):
SELECT Product, sum(AmountInUSD) AS Total
FROM ms20.transactions
GROUP BY Product
HAVING sum(AmountInUSD) > 800;
Ausgabe:
Es ist wichtig, die Ausführungsreihenfolge zu kennen, wenn wir mehrere Klauseln in einer Abfrage haben. Wir müssen uns an die Reihenfolge FWGHSOL
(beginnt bei F
und endet bei L
) erinnern, um die Ausführungsreihenfolge zu kennen, wobei F = FROM
, W = WO
, G = GROUP BY
, H = HAVING
, S = SELECT
, O = ORDER BY
und L = LIMIT
.
Unterschiede zwischen den Klauseln WHERE
und HAVING
in MySQL
Wir müssen beim Schreiben der Abfragen zur Manipulation von Daten die folgenden Punkte berücksichtigen.
Die WHERE -Klausel |
Die HAVING -Klausel |
---|---|
Implementiert in den Zeilen-(Datensatz-)Operationen. | Implementiert in den Spalten-(Attribut-)Operationen. |
Führen Sie vor Aggregatberechnungen eine Filteroperation für die einzelnen Zeilen durch. | Führen Sie eine Filteroperation für aggregierte (Gruppen-)Daten durch. |
Ruft die spezifischen Daten aus bestimmten Zeilen ab, die die angegebene Bedingung erfüllen. | Ruft zuerst alle Daten ab und trennt dann je nach angegebener Bedingung. |
Wir können mit dieser Klausel keine Aggregatmethoden verwenden. | Mit dieser Klausel können wir problemlos Aggregatmethoden verwenden. |
Er verhält sich wie ein Vorfilter und steht vor der GROUP BY -Klausel. |
Er verhält sich wie ein Nachfilter und kommt nach der GROUP BY -Klausel. |
Es kann mit den Anweisungen DELETE , SELECT und UPDATE verwendet werden. |
Es kann nur mit der Anweisung SELECT verwendet werden. |