Detaillierte Erklärung zur Verwendung von MySQL-Gruppenlinks

Detaillierte Erklärung zur Verwendung von MySQL-Gruppenlinks

Gruppieren und Verknüpfen sind in MySQL die beiden am häufigsten verwendeten Funktionen beim Betrieb von Datenbanken und bei der Dateninteraktion. Wenn diese beiden Elemente gut gehandhabt werden, ist die Ausführungseffizienz von MySQL sehr hoch.

1. Gruppieren nach

Wie der Name schon sagt, werden die Daten nach den Prinzipien und Merkmalen der jeweiligen Gruppe gruppiert.

1. Beginnen wir mit dem Einfachsten:

wähle count(*) aus der tb1-Gruppe nach tb1.sex;

Abfrage der Anzahl aller Datensätze und Gruppierung nach Geschlecht. Der durch diese Abfrage erhaltene Ergebnissatz hat nur eine Spalte: count(*).

2. Analysieren wir dann diese Gruppierung. Was können wir zwischen „select“ und „from“ setzen?

Nachdem die Daten gruppiert wurden, verlieren die meisten Datenfelder ihre Bedeutung. Überlegen Sie einmal: Wenn dieselbe Spalte mit mehreren Daten nur einen Wert anzeigt, für wen wird dann der Wert angezeigt? Ist dieser Wert nützlich?

Wenn man darüber nachdenkt, ist es nicht schwer zu erkennen, dass nur die Spalten von „by“ eingefügt werden können und dann SQL-Funktionsoperationen wie „count()“, „sum()“ usw. folgen (die nach „by“ als Grundlage für die Gruppierung eingefügt werden und als Ergebnis in die Aggregatfunktion aufgenommen werden).

Beispiel: Abfrage der Anzahl der Studenten an jedem College: (der Wert von „College“ ist die College-ID)

SELECT a.COLLEGE AS College,COUNT(*) AS Anzahl der Studenten FROM base_alumni a GROUP BY a.COLLEGE;

3. Where, having und group by werden zusammen verwendet

Als ich „group by“ zum ersten Mal lernte, geriet ich auf ein Missverständnis: „group by“ kann nicht zusammen mit „where“ verwendet werden, sondern nur „having“ …

Sie haben das Buch nicht sorgfältig gelesen. Tatsächlich können sie zusammen verwendet werden, aber „where“ kann nur vor „group by“ stehen und „having“ kann nur nach „group by“ stehen.

wobei es sich um das Schlüsselwort der Filterbedingung handelt. Es können jedoch nur die Daten vor der Gruppierung gefiltert werden.

Having ist auch ein Schlüsselwort für Filterbedingungen. Seine Funktion ist dieselbe wie where, aber es filtert die gruppierten Daten, d. h. es filtert den nach der Gruppierung erhaltenen Ergebnissatz.

Ich denke, der Zweck besteht darin, das Problem zweier Where-Klauseln in einer Anweisung zu lösen und sie zu unterscheiden.

Beispiel:

Abfrage, wie viele Studenten es in jedem Hauptfach an 30100 Colleges gibt.

SELECT a.MAJOR AS Hauptfach, COUNT(*) AS Anzahl der Studenten FROM base_alumni a WHERE a.COLLEGE = 30100 GROUP BY a.MAJOR;

Abfrage wie viele Studenten es in jedem College gibt, und zwar solange die Studentenzahl größer als 3 ist.

SELECT a.COLLEGE AS College,COUNT(*) AS Anzahl der Studenten FROM base_alumni a GROUP BY a.COLLEGE HAVING COUNT(*)>3;

Reihenfolge der Filterausführung: ① Filtern Sie zuerst *, ② Gruppieren Sie die gefilterten Ergebnisse, ③ Filtern Sie die gruppierten Ergebnisse

4. Die Verwendung von „Group By All“, hahahaha, ich schaue oft online nach und habe beschlossen, diese Syntax zu eliminieren ~

Tatsächlich möchten Sie nach dem vorherigen „Wo“ die gruppierten Ergebnisse anzeigen, die die Daten nicht erfüllen. Natürlich wird keine Berechnung durchgeführt und das Berechnungsergebnis wird durch 0 oder null dargestellt. Ich finde, dass diese Syntax nutzlos ist und mir fällt kein Anwendungsszenario ein ~

2. Deep Learning-Verbindungen

Es gibt 4 Arten von Verbindungen: Innenverbindung, Vollverbindung, linke Außenverbindung, rechte Außenverbindung

1. Wo die Verbindung erscheint

① Verbinden Sie Tabellen zwischen „von“ und „wo“

② Zwischen „where“ und „having“ filtert „having“ den Ergebnissatz von „group by“, d. h. behandelt den Ergebnissatz von „group by“ als Tabelle und verbindet ihn dann zur weiteren Filterung mit anderen Tabellen

2. Interpretation der Verbindungsart

Betrachten wir die Tabelle als eine Menge und die Verbindung als eine Abbildung, dann sind die Ergebnisse

Innerer Join: Eins-zu-eins-Zuordnung; vollständiger Join: kartesisches Produkt; linker äußerer Join: Eins-zu-eins-Zuordnung + linke Tabelle entspricht Null in der rechten Tabelle; rechter äußerer Join: Eins-zu-eins-Zuordnung + rechte Tabelle entspricht Null in der linken Tabelle.

Schlüsselwörter:

Innerer Join: innerer Join; vollständiger Join: Cross Join; linker äußerer Join: linker Join; rechter äußerer Join: rechter Join.

Grammatik:

Tabelle a links verbindet Tabelle b mit a.Spalte 1 = b.Spalte 2

3. Nutzung der Verbindung

Im vorherigen Gruppierungsbeispiel gab es einen Fehler im Ergebnissatz.

Beispiel: Abfrage der Anzahl der Studenten an jedem College: (der Wert des Colleges ist die College-ID). Wenn keine Verbindung besteht, wird das College mit der Studentennummer 0 nicht angezeigt, da in der aktuellen Tabelle keine Informationen zu diesem College vorhanden sind.

Führen wir also hier einen Left Join (Left Outer Join) durch:

Wählen Sie c.ID, a.COLLEGE, ANZAHL(a.COLLEGE) aus (wählen Sie ID aus dic_college) c links verbinden (wählen Sie COLLEGE aus base_alumni) a auf c.ID = a.COLLEGE GRUPPE NACH c.ID

Ich habe hier einen vollständigen Satz. Ich hatte große Schwierigkeiten, diesen Satz zu schreiben.

Lies es:

Lassen Sie uns zunächst einen Linksverweis der College-Tabelle und der Alumni-Informationstabelle (Studententabelle) durchführen.

Da wir das College wollen, ist das College die Haupttabelle und wird vor dem Left Join c LEFT JOIN a ON platziert …

Dann stellten wir fest, dass es viele Felder gab, also entfernten wir die redundanten Felder, was uns nicht nur die Beobachtung erleichterte, sondern auch die Ausführungseffizienz von SQL verbesserte.

①Ändern Sie die College-Tabelle so, dass sie nur ein Feld enthält (SELECT ID FROM dic_college).

②Ändern Sie die Studententabelle so, dass sie nur ein Feld hat (SELECT COLLEGE FROM base_alumni) a

Zu diesem Zeitpunkt ist das Abfrageergebnis wie folgt

Wählen Sie * aus (wählen Sie ID aus dic_college) c links Join (wählen Sie College aus base_alumni) a auf c.ID = a.COLLEGE

Gruppieren Sie zu diesem Zeitpunkt den Ergebnissatz: GROUP BY c.ID und ändern Sie das Abfragefeld

Im obigen Ergebnissatz entsprechen sich c.ID und a.COLLEGE eins zu eins. Zu diesem Zeitpunkt sind die Daten von count(*) die Gesamtzahl der Zeilen. Da unsere Haupttabelle die College-Tabelle ist, sind diese Daten dieselben wie die Daten von count(c.ID).

Allerdings sind die Werte in den Zeilen, in denen a.COLLEGE leer ist, alle 1, was nicht das ist, was wir wollen, also ändern wir count(*) in count(a.COLLEGE), und die Daten werden ausgegeben.

Dies ist die richtige Antwort auf die Abfrage nach der Anzahl der Studenten an jedem College unter allen Colleges! Natürlich zeigt der Screenshot oben nur die ersten paar Datenzeilen und dahinter verbergen sich weitere Daten.

4. Nachdem ich es getestet habe

Links und rechts verbindet...

Wählen Sie * aus einem linken Join b auf b.ID = a.FK_ID;

Wählen Sie * von b rechts aus, um a auf b.ID = a.FK_ID zu verbinden.

Die beiden Anweisungen führen zum selben Ergebnis. Ansonsten ist zwischen ihnen kein Unterschied erkennbar.

Bei der Vollverbindung handelt es sich um eine Querverbindung, und es wird keine Verbindung verwendet …

Wählen Sie * aus c, a, wobei c.ID = a.FK_ID;

Wählen Sie * aus c CROSS JOIN a auf c.ID = a.FK_ID;

Es besteht kein Unterschied zwischen diesen beiden Aussagen.

Dies ist der gesamte Inhalt dieses Artikels zur ausführlichen Erläuterung der MySQL-Gruppierung und -Verknüpfung. Wenn Sie noch Fragen haben, können Sie diese im Kommentarbereich unten diskutieren.

Das könnte Sie auch interessieren:
  • Probleme und Lösungen bei Fehler 08001 bei der Verknüpfung mit MySQL in IDEA und keiner Tabellenanzeige nach erfolgreicher Verbindung
  • Nach der Installation von Navicat in MySQL wird 2059 angezeigt: Authentifizierungs-Plugin und Docker für lokale virtuelle Maschinen sowie Remote-Link-Server
  • Python pymysql Link Datenbankabfrageergebnisse in Dataframe-Instanz konvertiert
  • Detaillierte Erläuterung von MySQL-Abfragebeispielen für mehrere Tabellen [Linkabfrage, Unterabfrage usw.]
  • Beispieloperation MySQL Kurzlink
  • Zusammenfassung des Installationsprozesses von MySql 8.0.11 und der beim Verknüpfen mit Navicat aufgetretenen Probleme
  • MySql verwendet Skip-Name-Resolve, um das Problem langsamer externer Netzwerkverbindungen des Clients zu lösen
  • So verwenden Sie einen SSH-Tunnel, um eine Verbindung zum MySQL-Server herzustellen
  • So zeigen Sie MySQL-Links an und löschen abnormale Links

<<:  WHMCS V7.4.2 Grafisches Installationstutorial

>>:  Untersuchung und Korrektur des seltsamen Verhaltens von parseInt() in js

Artikel empfehlen

Eine kurze Einführung in React

Inhaltsverzeichnis 1. CDN-Einführung 1.1 reagiere...

Ausführliche Erklärung zu Slots und Filtern in Vue

Inhaltsverzeichnis Spielautomaten Was sind Slots?...

Detaillierte Erläuterung der Js-Klassenkonstruktion und Vererbungsfälle

Die Definition und Vererbung von Klassen in JS si...

MySQL-Einschränkungen - Super detaillierte Erklärung

Inhaltsverzeichnis MySQL-Einschränkungsoperatione...

Mit CSS3 können Sie eine schwebende Wolkenanimation erzielen

Wirkung der Operation html <Kopf> <meta ...

js-Methode zum Löschen eines Felds in einem Objekt

Dieser Artikel stellt hauptsächlich die Implement...

Beispielcode für horizontalen Linienstil „hr“

Code kopieren Der Code lautet wie folgt: <hr S...

JavaScript zum Erzielen eines ausgewogenen digitalen Scroll-Effekts

Inhaltsverzeichnis 1. Hintergrund zur Umsetzung 2...

ReactJs-Grundlagen-Tutorial - Essential Edition

Inhaltsverzeichnis 1. Einführung in ReactJS 2. Ve...

Mysql SQL-Anweisungskommentare

Sie können MySQL-SQL-Anweisungen Kommentare hinzu...