Ich bin heute auf ein Problem gestoßen: Kann ich den Alias „as“ in den Anweisungen „insert into“, „update“ und „delete“ in MySQL verwenden? Ich bin noch dabei, mich damit auseinanderzusetzen, habe aber beim Nachschlagen einige nützliche Erkenntnisse zur Ausführungsreihenfolge von SQL- und MySQL-Anweisungen gefunden, die ich gerne mit Ihnen teilen möchte: 1. SQL-Ausführungsreihenfolge (1)von (2) am (3) beitreten (4) wobei (5) group by (beginnen Sie mit der Verwendung des Alias in select, der in nachfolgenden Anweisungen verwendet werden kann) (6) Durchschnitt, Summe.... (7)mit (8) Auswählen (9) verschiedene (10) Bestellung per Aus dieser Sequenz können wir leicht erkennen, dass alle Abfrageanweisungen ab ausgeführt werden. Während des Ausführungsprozesses generiert jeder Schritt eine virtuelle Tabelle für den nächsten Schritt, und diese virtuelle Tabelle dient als Eingabe für den nächsten Ausführungsschritt. Schritt 1: Führen Sie zunächst ein kartesisches Produkt für die ersten beiden Tabellen in der From-Klausel aus, um eine virtuelle Tabelle vt1 zu generieren (wählen Sie eine relativ kleine Tabelle als Basistabelle aus). Schritt 2: Der nächste Schritt besteht darin, den On-Filter anzuwenden. Der logische Ausdruck in „on“ wird auf jede Zeile in vt1 angewendet, wodurch die Zeilen herausgefiltert werden, die dem logischen Ausdruck „on“ entsprechen, und die virtuelle Tabelle vt2 generiert wird. Schritt 3: Handelt es sich um einen Outer Join, werden in diesem Schritt die äußeren Zeilen hinzugefügt. Der Left Outer Join fügt die im zweiten Schritt aus der linken Tabelle herausgefilterten Zeilen hinzu. Handelt es sich um einen Right Outer Join, werden die im zweiten Schritt aus der rechten Tabelle herausgefilterten Zeilen hinzugefügt. Dadurch entsteht eine virtuelle Tabelle vt3. Schritt 4: Wenn die Anzahl der Tabellen in der From-Klausel zwei überschreitet, wird vt3 mit der dritten Tabelle verbunden, um das kartesische Produkt zu berechnen und eine virtuelle Tabelle zu generieren. Dieser Vorgang ist eine Wiederholung der Schritte 1 bis 3, um schließlich eine neue virtuelle Tabelle vt3 zu erhalten. Schritt 5: Wenden Sie den Where-Filter an und verweisen Sie den Where-Filter auf die im vorherigen Schritt erstellte virtuelle Tabelle, um die virtuelle Tabelle vt4 zu generieren. Es gibt hier ein wichtiges Detail, das erwähnt werden muss. Bei Abfragen, die äußere Join-Klauseln enthalten, stellt sich eine verwirrende Frage: Soll der logische Ausdruck im On-Filter oder im Where-Filter angegeben werden? Der größte Unterschied zwischen „on“ und „where“ besteht darin, dass, wenn Sie in „on“ einen logischen Ausdruck anwenden, die entfernten Zeilen im dritten Schritt (Outer Join) wieder hinzugefügt werden können, während die Entfernung von „where“ endgültig ist. Um ein einfaches Beispiel zu nennen: Es gibt eine Schülertabelle (Klasse, Name) und eine Punktetabelle (Name, Punkte). Ich muss nun die Punkte aller Schüler in Klasse x zurückgeben, aber mehrere Schüler in dieser Klasse haben die Prüfung versäumt, was bedeutet, dass in der Punktetabelle keine Datensätze vorhanden sind. Um das gewünschte Ergebnis zu erhalten, müssen wir die Beziehung zwischen der Tabelle mit den Schülern und den Noten in der on-Klausel angeben (student.name = grade.name). Dann stellen wir fest, dass beim Ausführen des zweiten Schritts die Datensätze der Schüler, die die Prüfung nicht abgelegt haben, nicht in vt2 erscheinen, weil sie durch den logischen Ausdruck von on herausgefiltert werden. Wir können jedoch den Left Outer Join verwenden, um die Schüler abzurufen, die die Prüfung in der linken Tabelle (Studenten) nicht abgelegt haben, weil wir alle Schüler der Klasse x zurückgeben möchten. Wenn student.class='x' in on angewendet wird, ruft der Left Outer Join alle Schülerdatensätze der Klasse x ab (danke an den Internetnutzer Kang Qinmou__Kang Qinmiao für die Korrektur), sodass wir student.class='x' nur im Where-Filter anwenden können, weil dessen Filterung endgültig ist. Schritt 6: Die Group-By-Klausel fasst die eindeutigen Werte zu einer Gruppe zusammen, um die virtuelle Tabelle vt5 zu erhalten. Wenn „Gruppieren nach“ angewendet wird, können alle nachfolgenden Schritte nur vt5-Spalten oder Aggregatfunktionen (Anzahl, Summe, Durchschnitt usw.) abrufen. Der Grund dafür ist, dass der endgültige Ergebnissatz nur eine Zeile für jede Gruppe enthält. Bitte beachten Sie dies. Schritt 7: Wenden Sie die Cube- oder Rollup-Option an, um eine Supergruppe für vt5 zu generieren und vt6 zu generieren. Schritt 8: Wenden Sie den Filter an, um vt7 zu generieren. Der Filter „Haben“ ist der erste und einzige Filter, der auf die gruppierten Daten angewendet wird. Schritt 9: Verarbeiten Sie die Select-Klausel. Filtern Sie die Spalten heraus, die in der Auswahl in vt7 erscheinen. Generieren Sie vt8. Schritt 10: Wenden Sie die distinkte Klausel an, um identische Zeilen aus vt8 zu entfernen und vt9 zu generieren. Tatsächlich ist „distinct“ redundant, wenn die Klausel „group by“ angewendet wird. Der Grund dafür ist, dass beim Gruppieren die eindeutigen Werte in der Spalte zusammengefasst werden und für jede Gruppe nur eine Datensatzzeile zurückgegeben wird, sodass alle Datensätze unterschiedlich sind. Schritt 11: Wenden Sie die Order-By-Klausel an. Sortieren Sie vt9 nach order_by_condition und geben Sie einen Cursor anstelle einer virtuellen Tabelle zurück. SQL basiert auf der Mengenlehre. Eine Menge sortiert ihre Zeilen nicht vor. Sie ist nur eine logische Sammlung von Mitgliedern, und die Reihenfolge der Mitglieder ist irrelevant. Eine Abfrage, die eine Tabelle sortiert, kann ein Objekt zurückgeben, das die logische Organisation der Daten in einer bestimmten physischen Reihenfolge enthält. Dieses Objekt wird Cursor genannt. Da der Rückgabewert ein Cursor ist, können Abfragen mit der ORDER BY-Klausel nicht auf Tabellenausdrücke angewendet werden. Sortieren ist sehr aufwändig. Wenn Sie nicht sortieren müssen, sollten Sie „order by“ am besten nicht angeben. Schließlich ist dieser Schritt der erste und einzige Schritt, bei dem Sie Aliase in der Auswahlliste verwenden können. Schritt 12: Obere Optionen anwenden. Erst dann wird das Ergebnis an den Anforderer, also den Benutzer, zurückgegeben. 2. MySQL-Ausführungsreihenfolge Definition der SELECT-Anweisung Eine vollständige SELECT-Anweisung enthält mehrere optionale Klauseln. Die Definition der SELECT-Anweisung lautet wie folgt: SQL-Code <SELECT-Klausel> [<FROM-Klausel>] [<WHERE-Klausel>] [<GROUP BY-Klausel>] [<HAVING-Klausel>] [<ORDER BY-Klausel>] [<LIMIT-Klausel>] Die SELECT-Klausel ist erforderlich und andere Klauseln wie die WHERE-Klausel und die GROUP BY-Klausel sind optional. In einer SELECT-Anweisung ist die Reihenfolge der Klauseln festgelegt. Beispielsweise steht die GROUP BY-Klausel nicht vor der WHERE-Klausel. Ausführungsreihenfolge der SELECT-Anweisung Die Ausführungsreihenfolge der Klauseln in einer SELECT-Anweisung unterscheidet sich von der Reihenfolge, in der die Klauseln in der SELECT-Anweisung eingegeben werden. Daher beginnt die Ausführung nicht mit der SELECT-Klausel, sondern wird in der folgenden Reihenfolge ausgeführt: Start -> FROM-Klausel -> WHERE-Klausel -> GROUP BY-Klausel -> HAVING-Klausel -> ORDER BY-Klausel -> SELECT-Klausel -> LIMIT-Klausel -> Endergebnis Nach der Ausführung jeder Klausel wird ein Zwischenergebnis für die nächste zu verwendende Klausel generiert. Wenn eine Klausel nicht vorhanden ist, wird sie übersprungen. Im Vergleich dazu ist die Ausführungsreihenfolge von MySQL und SQL grundsätzlich gleich. Die Standardreihenfolge von SQL-Anweisungen ist: Wählen Sie den Namen des Kandidaten und max(Gesamtpunktzahl) als maximale Gesamtpunktzahl aus tb_Grade wobei der Name des Kandidaten nicht null ist Gruppieren nach Kandidatennamen mit max(Gesamtpunktzahl) > 600 Sortieren nach maximaler Gesamtpunktzahl Im obigen Beispiel werden die SQL-Anweisungen in der folgenden Reihenfolge ausgeführt: (1). Führen Sie zunächst die FROM-Klausel aus, um die Daten aus der Datenquelle aus der Tabelle tb_Grade zusammenzustellen. (2) Führen Sie die WHERE-Klausel aus, um alle Daten in der Tabelle tb_Grade zu filtern, die nicht NULL sind. (3). Führen Sie die GROUP BY-Klausel aus, um die Tabelle tb_Grade nach der Spalte „Student Name“ zu gruppieren (Hinweis: Sie können den Alias in der Auswahl erst ab diesem Schritt verwenden. Er gibt einen Cursor zurück, keine Tabelle, daher kann der Alias in der Auswahl nicht in der Where-Klausel verwendet werden, aber in der Having-Klausel. Vielen Dank an den Netizen zyt1369 für diese Frage.) (4) Berechnen Sie die Aggregatfunktion max () und ermitteln Sie den größten Wert in der Gesamtpunktzahl gemäß der "Gesamtpunktzahl". (5). Führen Sie die HAVING-Klausel aus, um Kurse mit einer Gesamtpunktzahl von über 600 Punkten herauszufiltern. (7). Führen Sie die ORDER BY-Klausel aus und sortieren Sie die Endergebnisse nach „Maximale Punktzahl“. Ich werde weiterhin nach den aufgetretenen Problemen suchen und hoffe natürlich auch, dass die Meister mir etwas beibringen können. Zusammenfassen Das Obige ist der gesamte Inhalt dieses Artikels zur Analyse der Anweisungsausführungsreihenfolge von SQL und MySQL. Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht und der Herausgeber wird Ihnen rechtzeitig antworten. Interessierte Freunde können sich auf Folgendes beziehen: Tipps zur Optimierung der Effizienz von MySQL-Unterabfragen in Anweisungen, Beispielanalyse zur Optimierung von MySQL-Unterabfragen und verschachtelten Abfragen, mehrere wichtige MySQL-Variablen usw. Ich hoffe, es wird für alle hilfreich sein. Das könnte Sie auch interessieren:
|
<<: Detaillierte Erklärung der Lösung zur Migration von Antd+React-Projekten nach Vite
>>: So zeigen Sie verfügbare Netzwerkschnittstellen in Linux an
Das Herunterladen dieser Datenbank nimmt viel Zei...
Vorwort Als grundlegende Datenstruktur spielen Ar...
Inhaltsverzeichnis JS liest Datei FileReader doku...
<br />Gestalten Sie Ihre Website wissenschaf...
Inhaltsverzeichnis 1. Grundlagen der Audiowiederg...
Über wen Zeigt die am System angemeldeten Benutze...
In diesem Artikel wird das Implementierungszeugni...
MySQL Maximale Anzahl von Verbindungen anzeigen u...
Portainer-Einführung Portainer ist ein grafisches...
Beispiel für die Validierung eines jQuery-Formula...
<br />Ich habe mir heute die neu gestaltete ...
Inhaltsverzeichnis 【Code-Hintergrund】 【Code-Imple...
In einigen Szenarien möchten wir derselben Ethern...
Als der Autor MySQL zum Hinzufügen eines Benutzer...
Beim Erstellen einer B/S-Systemschnittstelle stößt...