We're sorry but this page doesn't work properly without JavaScript enabled. Please enable it to continue.
Feedback

Datenbankanfragen - Gruppierung

00:00

Formal Metadata

Title
Datenbankanfragen - Gruppierung
Title of Series
Number of Parts
93
Author
License
CC Attribution 4.0 International:
You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal purpose as long as the work is attributed to the author in the manner specified by the author or licensor.
Identifiers
Publisher
Release Date
Language

Content Metadata

Subject Area
Genre
Abstract
In diesem Video geht es um die Anwendung der Gruppierung in SQL-Anfragen.
Keywords
62
AlgebraAttribute grammarData managementOrder (biology)Type theoryVideoconferencingFlow separationAlgebraForm (programming)Functional (mathematics)Group actionCladeMilitary operationContent (media)Physical systemTable (information)CountingNumberElectronic visual displaySubgroupOperator (mathematics)Parameter (computer programming)Error messageMetropolitan area networkPointer (computer programming)Cartesian coordinate systemAliasingExpressionNoten <Programm>Condition numberSelectivity (electronic)SpeciesTupleElement (mathematics)Single-precision floating-point formatRule of inferenceAttribute grammarOrder (biology)Digital signalAverageOptical character recognitionCladeMaxima and minimaTable (information)CountingSubgroupMAX <Programm>SummierbarkeitGreatest elementMaximum (disambiguation)TupleXMLComputer animation
Hallo, in diesem Video geht es um die Anwendung der Gruppierung in SQL-Anfragen. Eine Gruppierung müssen wir machen, wenn wir pro Ort alle Kunden zählen möchten. Hierfür müssen die Kunden aus einem Ort in eine Untergruppe zusammengefasst werden.
Das ist die Gruppierung nach dem Ort. Anschließend können die Kunden in den einzelnen Untergruppen gezählt werden. Jetzt kann die Gruppierungsbedingung angewendet werden, dass nur die Orte angezeigt werden, die mehr als einen Kunden beinhalten. In unserem Beispiel wäre das die Stadt Dortmund.
Hierfür haben wir in der relationalen Algebra zwei Operationen. Einmal die Gruppierungsoperation und die nachfolgende Selektionsbedingung. Wie ist das jetzt in SQL umzusetzen? In SQL wird die Gruppierung in der Gruppeiklausel spezifiziert.
Die nachfolgende Gruppierungsbedingung findet sich dann in der Having-Klausel. Die Aggregationsfunktion findet sich in der Selektklausel, da hier die Attribute spezifiziert werden, die hinterher zurückgegeben werden. Die Benennung der berechneten Spalte in Anzahl erfolgt durch das Datenmarkt-Management-System erst ganz zum Schluss.
Daher kann der Spalten alias Anzahl in der Having-Klausel nicht verwendet werden. Weshalb ist eine separate Having-Klausel erforderlich? Es gibt zwei Arten von Auswahlbedingungen. Einmal die Auswahlbedingung, die sich auf die Tabellen in der Formklausel bezieht.
Und einmal eine Auswahlbedingung, die sich auf die Gruppierung bezieht. Beide Varianten treten auf, wenn wir die Geschäftskunden pro Ort zählen wollen und nur die Anzahlen ausgeben wollen, wenn die Anzahl Größe 1 ist.
Für einen Geschäftskunden ist die Anrede Herr oder Frau nicht bestimmt. Das heißt, die Anrede hat dann den Wert Null. Jetzt könnte man versucht sein, beide Bedingungen in die Rare-Klausel zu schreiben. Ein solcher Versuch schlicht fehl, und man erhält eine Fehlermeldung des Datenmarkt-Management-Systems.
Die Fehlermeldung lautet, dass die Gruppenfunktion hier nicht zulässig ist. Die Gruppenfunktion ist die Aggregationsfunktion Count. Eine Aggregationsfunktion darf also nicht in der Rare-Klausel auftreten.
Das liegt daran, dass zuerst gruppiert werden muss, bevor gezählt werden kann. Die Elemente, die gezählt werden sollen, müssen aber vorher bekannt sein. Das heißt, die Geschäftskunden müssen zunächst herausgefiltert werden und gruppiert werden, bevor sie gezählt werden können. Daher kann auf das Attributanrede nur vor der Gruppierung zugegriffen werden.
Nach der Gruppierung kann nur noch auf die Gruppierungsattribute und die berechneten Spalten zugegriffen werden. Also nicht mehr auf die Anrede einzelner Kunden. Daher haben wir hier eine Trennung der Auswahlbedingungen.
Alle Bedingungen, die sich auf die From-Klausel beziehen, stehen in der Rare-Klausel. Die Gruppierungsbedingungen, die stehen dann in der Having-Klausel, die der Group-By-Klausel folgt. Im SQL-Statement steht daher die Bedingung, dass die Anrede nicht null sein darf, in der Rare-Klausel.
Die Gruppierungsbedingung, dass eine Gruppe mehr als einen Kunden enthalten soll, steht dann in der Having-Klausel. Bei der Verwendung von Aggregationsfunktionen muss berücksichtigt werden, dass Null-Werte nicht mit berücksichtigt werden. Insbesondere die Attribute, die nicht null werden können, wie Primärschlüssel, bieten sich als Argumente für die Aggregationsfunktion an.
In diesem Beispiel würden wir dann alle Kunden zählen, deren Nachname mit Mai beginnt. Verwenden wir das Attributanrede in der Count-Funktion als Argument, dann fehlen uns beim Ergebnis alle Geschäftskunden.
Das liegt daran, dass die Tupel mit der Anrede null nicht mitgezählt werden. Ein anderer Fehler tritt auf, wenn die Gruppierung vergessen wird. Das erkennt das Datenbank-Management-System daran, dass das Attribut Ort auch noch in der Select-Klausel auftritt.
Bei der Verwendung von Aggregationsfunktionen müssen daher alle Attribute aus der Select -Klausel, die nicht berechnet werden, auch in der Group-By-Klausel auftreten. In diesem Fall ist das das Attribut Ort.
Das ist der Inhalt der Single Value Rule, die diese Regel besagt, dass alle nicht berechneten Attribute, die nach der Gruppierung verwendet werden, auch in der Group-I-Klausel auftreten müssen. Das betrifft beispielsweise die Select-Klausel, die Having-Klausel und die Order-By-Klausel.
In diesem Beispiel taucht in der Order-By-Klausel auch noch das Attribut Vorname auf. Allerdings nicht in der Group-By-Klausel, damit ist die Single Value Rule nicht erfüllt. Das führt zu der Fehlermeldung Not a Group-By-Expression. Durch die Aufnahme des Attributs Vorname in die Group-By-Section werden Untergruppen nicht nur nach dem Ort, sondern auch nach dem Vornamen gebildet.
Dadurch werden für jeden Ort die Kunden gezählt, die den gleichen Vornamen besitzen. Dass sich alle Vornamen unterscheiden, erhalten wir für jeden Kunden eine eigene Gruppe.
Insgesamt erhalten wir für die Syntax der Select-Anweisung die Reihenfolge der Schlüsselworte Select, from where, jetzt zusätzlich mit Group-By und Having und als letztes Order-By.