Where vs Having in MySQL

Mehvish Ashiq 15 Februar 2024
  1. WHERE vs. HAVING in MySQL
  2. die WHERE-Klausel in MySQL
  3. die HAVING-Klausel in MySQL
  4. Unterschiede zwischen den Klauseln WHERE und HAVING in MySQL
Where vs Having 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:

wo vs in mysql haben - transaktionsdaten

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:

wo vs haben in mysql - wo-Klausel-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:

where vs having in mysql - have-Klausel gibt eins aus

Beispielcode (mit Aggregatfunktion):

SELECT Product, sum(AmountInUSD) AS Total
FROM ms20.transactions
GROUP BY Product
HAVING sum(AmountInUSD) > 800;

Ausgabe:

wo vs in mysql haben - Klauselausgabe zwei haben

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.
Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

Verwandter Artikel - MySQL Query