Detaillierte Erläuterung von MySQL-Unterabfragen (verschachtelte Abfragen), Verknüpfungstabellen und kombinierten Abfragen

Detaillierte Erläuterung von MySQL-Unterabfragen (verschachtelte Abfragen), Verknüpfungstabellen und kombinierten Abfragen

1. Unterabfrage

MySQL 4.1 und höher unterstützen Unterabfragen

Unterabfrage: Eine Abfrage, die in einer anderen Abfrage verschachtelt ist.

Die Rolle der Unterabfrage:

1. Filter:

Beispiel 1: Abrufen der IDs aller Kunden, die den Artikel TNT2 bestellt haben

= +

Im Allgemeinen gibt es keine Begrenzung für die Anzahl der Unterabfragen, die in der WHERE-Klausel verschachtelt werden können. In der Praxis können jedoch aufgrund von Leistungseinschränkungen nicht zu viele Unterabfragen verschachtelt werden.
Hinweis: Die Spalten müssen übereinstimmen. Die Verwendung einer Unterabfrage in einer WHERE-Klausel (wie hier gezeigt) sollte sicherstellen, dass die SELECT-Anweisung dieselbe Anzahl Spalten hat wie in der WHERE-Klausel. Normalerweise gibt die Unterabfrage eine einzelne Spalte zurück und führt eine Übereinstimmung daraus aus. Bei Bedarf können jedoch auch mehrere Spalten verwendet werden.

Beispiel 2: Gibt eine Liste der Kunden zurück, die das Produkt TNT2 bestellt haben

Eine effizientere Möglichkeit zum Abfragen dieses Beispiels ist die Verwendung eines Join:

Hinweis: Die Details zur Verbindung werden weiter unten zusammengefasst.

2. Erstellen Sie ein berechnetes Feld:

Korrelierte Unterabfrage: Eine Unterabfrage, die eine äußere Abfrage beinhaltet. Diese Syntax muss verwendet werden, wenn der Spaltenname mehrdeutig sein könnte.
Beispiel: Gesamtanzahl der Bestellungen für jeden Kunden in der Kundentabelle anzeigen

Zusammenfassen:
Unterabfragen werden am häufigsten im IN-Operator einer WHERE-Klausel und zum Auffüllen berechneter Spalten verwendet. Die zuverlässigste Methode zum Erstellen (und Testen) von Unterabfragen besteht darin, dies inkrementell zu tun, ähnlich wie MySQL sie handhabt. Erstellen und testen Sie zunächst die innerste Abfrage. Erstellen und testen Sie dann die äußere Abfrage mit fest codierten Daten und betten Sie die Unterabfrage erst ein, nachdem Sie überprüft haben, dass sie funktioniert. Testen Sie es jetzt erneut. Wiederholen Sie diese Schritte für jede Abfrage, die Sie hinzufügen möchten. Dadurch wird die Erstellung der Abfrage nur geringfügig zeitaufwändiger, später wird jedoch viel Zeit gespart (um herauszufinden, warum die Abfrage nicht ordnungsgemäß funktioniert hat) und die Wahrscheinlichkeit, dass die Abfrage überhaupt ordnungsgemäß funktioniert, wird erheblich erhöht.

2. Tabelle verbinden

Join-Tabellen sind eine der leistungsstärksten Funktionen von SQL

1. Einige relevante Grundwissensreserven:

Relationale Tabelle: Stellt sicher, dass Informationen auf mehrere Tabellen aufgeteilt werden, eine Tabelle für jeden Datentyp. Tabellen sind über einige gemeinsame Werte miteinander verbunden (relational im relationalen Design). Es spart Zeit und Speicherplatz und erleichtert die Änderung und Aktualisierung von Daten. Daher ist die Skalierbarkeit relationaler Datenbanken viel besser als die nicht-relationaler Datenbanken.
Skalierbarkeit: Die Fähigkeit, sich fehlerfrei an steigende Arbeitslasten anzupassen. Eine gut konzipierte Datenbank oder Anwendung gilt als skalierbar.
Join: Join ist ein Mechanismus zum Verknüpfen von Tabellen in einer SELECT-Anweisung. Damit können mehrere Tabellen verknüpft werden, um eine Ausgabemenge zurückzugeben.

Ein Join ist keine physische Einheit. Er existiert nicht in der eigentlichen Datenbanktabelle. Der Join wird von MySQL nach Bedarf hergestellt und bleibt für die Dauer der Abfrageausführung bestehen.
Beim Arbeiten mit relationalen Tabellen ist es sehr wichtig, nur gültige Daten in relationale Spalten einzufügen. Um dies zu verhindern, muss die referenzielle Integrität gewahrt werden, was durch die Angabe von Primär- und Fremdschlüsseln in der Tabellendefinition erreicht wird.

2. Grundanschluss:

Beispiel 1:

Die beiden Tabellen werden mithilfe der WHERE-Klausel korrekt verknüpft: Die WHERE-Klausel weist MySQL an, die Vend_ID in der Tabelle „Vendors“ mit der Vend_ID in der Tabelle „Products“ abzugleichen. Hinweis: Beim Verweisen auf Spalten, die mehrdeutig sein könnten, müssen Sie vollständig qualifizierte Spaltennamen verwenden (Tabellen- und Spaltennamen durch einen Punkt getrennt).
Wenn Sie mehrere Tabellen in einer SELECT-Anweisung verknüpfen, wird die entsprechende Beziehung im laufenden Betrieb erstellt. In der Definition der Datenbanktabelle gibt es keine Anweisungen an MySQL, wie die Tabellen verknüpft werden sollen. Wenn Sie zwei Tabellen verknüpfen, verknüpfen Sie tatsächlich jede Zeile der ersten Tabelle mit jeder Zeile der zweiten Tabelle. Die WHERE-Klausel fungiert als Filterbedingung, die nur diejenigen Zeilen einschließt, die der angegebenen Bedingung (hier: der Join-Bedingung) entsprechen. Ohne eine WHERE-Klausel wird jede Zeile der ersten Tabelle mit jeder Zeile der zweiten Tabelle gepaart, unabhängig davon, ob sie logisch zusammengehören.

Kartesisches Produkt: Das Ergebnis, das von einer Tabellenbeziehung ohne Join-Bedingung zurückgegeben wird. Die Anzahl der abgerufenen Zeilen entspricht der Anzahl der Zeilen in der ersten Tabelle multipliziert mit der Anzahl der Zeilen in der zweiten Tabelle. Wird manchmal auch als Gabelung bezeichnet.

Beispiel 2: Anzeige der Artikel in der Bestellnummer 20005

Sie sollten sicherstellen, dass alle Verknüpfungen eine WHERE-Klausel haben, da MySQL sonst viel mehr Daten zurückgibt als gewünscht.
MySQL verarbeitet den Join, indem es zur Laufzeit alle angegebenen Tabellen verknüpft. Diese Verarbeitung kann sehr ressourcenintensiv sein. Achten Sie daher darauf, keine unnötigen Tabellen zu verknüpfen. Je mehr Tabellen verknüpft werden, desto stärker verschlechtert sich die Leistung.

Equi-Join: Basiert auf einem Gleichheitstest zwischen zwei Tabellen, auch als Inner Join bekannt. (Die am häufigsten verwendete Verbindungsmethode)

Beispiele:

Die ANSI-SQL-Spezifikation bevorzugt die INNER JOIN-Syntax. Obwohl es tatsächlich einfacher ist, Verknüpfungen mit der WHERE-Klausel zu definieren, stellt die Verwendung einer expliziten Verknüpfungssyntax sicher, dass Sie die Verknüpfungsbedingung nicht vergessen, was manchmal die Leistung beeinträchtigen kann.

3. Erweiterte Verbindung:

Beispiel 1: Einer Tabelle einen Alias ​​zuweisen (dasselbe wie einer Spalte einen Alias ​​zuweisen)

Hinweis: Tabellenaliase werden nur während der Abfrageausführung verwendet. Im Gegensatz zu Spaltenaliasen werden Tabellenaliase nicht an den Client zurückgegeben.

Einer der Hauptgründe für die Verwendung von Tabellenaliasen besteht darin, dass man in einer einzigen SELECT-Anweisung mehr als einmal auf dieselbe Tabelle verweisen kann. Beispiel 2: Abfrage anderer Artikel, die vom Lieferanten des Artikels mit der Produktions-ID DTNTR hergestellt wurden

Bei der obigen Lösung handelt es sich um einen Self-Join, der normalerweise als äußere Anweisung verwendet wird, um die beim Abrufen von Daten aus derselben Tabelle verwendete Unterabfrageanweisung zu ersetzen. Dieses Beispiel kann auch mit einer Unterabfrage gelöst werden. Obwohl das Endergebnis dasselbe ist, kann ein Join manchmal viel schneller verarbeitet werden als eine Unterabfrage. Beim Lösen eines Problems können Sie zwei Ansätze ausprobieren, um zu ermitteln, welcher besser funktioniert.

Natürlicher Join: Eliminieren Sie mehrfache Vorkommen, sodass jede Spalte nur einmal zurückgegeben wird. Im Allgemeinen sind die von uns verwendeten internen Verbindungen natürliche Verbindungen.

Beispiel 3: Natürliche Verbindung

Natürliche Verknüpfungen werden normalerweise durch die Verwendung eines Platzhalters (SELECT *) für eine Tabelle und eine explizite Teilmenge der Spalten aller anderen Tabellen durchgeführt.

Äußerer Join: Ein Join schließt Zeilen ein, denen in der zugehörigen Tabelle keine Zeilen zugeordnet sind.

Beispiel 4: Alle Kunden abrufen, auch die ohne Bestellungen

Die Verwendung ähnelt dem Inner Join und das Schlüsselwort OUTER JOIN wird verwendet, um den Join-Typ anzugeben. Im Gegensatz zu einem inneren Join, der Zeilen aus zwei Tabellen verknüpft, schließt ein äußerer Join jedoch auch Zeilen ein, für die es keine verknüpften Zeilen gibt.

Es gibt zwei grundlegende Formen von äußeren Verknüpfungen: linke äußere Verknüpfung und rechte äußere Verknüpfung. Wenn Sie die OUTER JOIN-Syntax verwenden, müssen Sie das Schlüsselwort RIGHT oder LEFT verwenden, um die Tabelle anzugeben, die alle ihre Zeilen enthält (RIGHT bezieht sich auf die Tabelle auf der rechten Seite von OUTER JOIN und LEFT bezieht sich auf die Tabelle auf der linken Seite von OUTER JOIN). Das obige Beispiel verwendet LEFT OUTER JOIN, um alle Zeilen aus der Tabelle auf der linken Seite der FROM-Klausel (der Kundentabelle) auszuwählen.
Hinweis: MySQL unterstützt die Verwendung der Abkürzungszeichen *= und =* nicht, obwohl diese beiden Operatoren in anderen DBMSs beliebt sind.

Beispiel 5: Abrufen aller Kunden und der Anzahl der von jedem Kunden aufgegebenen Bestellungen (einschließlich der Kunden, die keine Bestellungen aufgegeben haben)

Aggregatfunktionen können bequem mit verschiedenen Verknüpfungstypen verwendet werden.

Verwenden von Joins und Join-Bedingungen:

  1. 1. Achten Sie auf die Art der verwendeten Verbindung. Im Allgemeinen verwenden wir innere Verknüpfungen, aber auch äußere Verknüpfungen sind effektiv.
  2. 2. Stellen Sie sicher, dass die richtigen Join-Bedingungen verwendet werden. Andernfalls werden falsche Daten zurückgegeben.
  3. 3. Es sollte immer eine Join-Bedingung angegeben werden, da sonst ein kartesisches Produkt entsteht.
  4. 4. In einen Join können mehrere Tabellen einbezogen werden und für jeden Join können sogar unterschiedliche Join-Typen verwendet werden. Dies ist zwar zulässig und im Allgemeinen sinnvoll, Sie sollten jedoch jede Verbindung einzeln testen, bevor Sie sie gemeinsam testen. Dies erleichtert die Fehlerbehebung.

3. Kombinierte Abfrage

Kombinierte Abfrage: Führen Sie mehrere Abfragen (mehrere SELECT-Anweisungen) aus und geben Sie die Ergebnisse als einzigen Abfrageergebnissatz zurück. Diese kombinierten Abfragen werden oft als Union- oder zusammengesetzte Abfragen bezeichnet.

Warum brauchen wir kombinierte Abfragen?

  1. Geben Sie ähnlich strukturierte Daten aus verschiedenen Tabellen in einer einzigen Abfrage zurück.
  2. Führen Sie mehrere Abfragen für eine einzelne Tabelle aus und geben Sie die Daten als eine einzelne Abfrage zurück.
  3. Die Verwendung kombinierter Abfragen kann komplexe WHERE-Klauseln erheblich vereinfachen und das Abrufen von Daten aus mehreren Tabellen erleichtern.

1. Erstellen Sie eine kombinierte Abfrage

Schlüsselwörter: UNION-Operator

Beispiel 1: Holen Sie sich eine Liste aller Artikel, deren Preis kleiner oder gleich 5 ist, und schließen Sie alle von den Lieferanten 1001 und 1002 hergestellten Artikel ein (unabhängig vom Preis).

UNION weist MySQL an, zwei SELECT-Anweisungen auszuführen und die Ausgabe in einem einzigen Abfrageergebnissatz zu kombinieren. Diese Lösung entspricht der Lösung where prod_price<=5 OR vend_id in(1001,1002); und es sind folgende Regeln zu beachten:

  1. 1. UNION muss aus zwei oder mehr SELECT-Anweisungen bestehen, die durch das Schlüsselwort UNION getrennt sind (wenn Sie also 4 SELECT-Anweisungen kombinieren, verwenden Sie 3 UNION-Schlüsselwörter).
  2. 2. Jede Abfrage in einer UNION muss dieselben Spalten, Ausdrücke oder Aggregatfunktionen enthalten (die Spalten müssen jedoch nicht in derselben Reihenfolge aufgelistet sein).
  3. 3. Spaltendatentypen müssen kompatibel sein: Die Typen müssen nicht exakt gleich sein, aber es müssen Typen sein, die das DBMS implizit konvertieren kann (z. B. unterschiedliche numerische Typen oder unterschiedliche Datumstypen).
  4. 4. Kombinierte Abfragen mit UNION können verschiedene Tabellen anwenden

In einigen einfachen Fällen kann die Verwendung von UNION komplexer sein als die Verwendung einer WHERE-Klausel. Bei komplexeren Filterbedingungen oder beim Abrufen von Daten aus mehreren Tabellen (anstatt aus einer einzigen Tabelle) kann die Verwendung von UNION den Vorgang jedoch vereinfachen.
Standardmäßig entfernt UNION automatisch doppelte Zeilen aus dem Abfrageergebnissatz. Wenn Sie alle übereinstimmenden Zeilen zurückgeben möchten, verwenden Sie UNION ALL statt UNION.

Hinweis: UNION erfüllt fast immer dasselbe wie mehrere WHERE-Bedingungen. UNION ALL ist eine Form von UNION, die die Arbeit erledigt, die die WHERE-Klausel nicht erledigen kann. Wenn wirklich alle übereinstimmenden Zeilen für jede Bedingung angezeigt werden müssen (einschließlich doppelter Zeilen), müssen Sie UNION ALL anstelle von WHERE verwenden.

Beispiel 2: Sortieren kombinierter Abfrageergebnisse

Wenn Sie UNION zum Kombinieren von Abfragen verwenden, kann nur eine ORDER BY-Klausel verwendet werden und diese muss nach der letzten SELECT-Anweisung stehen. Für den Ergebnissatz gibt es keine Situation, in der ein Teil auf eine Weise und ein anderer Teil auf eine andere Weise sortiert ist. Daher sind mehrere ORDER BY-Klauseln nicht zulässig. Die ORDER BY-Klausel sortiert alle von allen SELECT-Anweisungen zurückgegebenen Ergebnisse.

Oben finden Sie die detaillierte Integration von MySQL-Unterabfragen (verschachtelte Abfragen), Verknüpfungstabellen und kombinierten Abfragen, die vom Editor eingeführt wurden. Ich hoffe, dass es für alle hilfreich sein wird. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird Ihnen rechtzeitig antworten. Ich möchte auch allen für ihre Unterstützung der Website 123WORDPRESS.COM danken!

Das könnte Sie auch interessieren:
  • Unterabfragebeispiele in MySQL
  • Beispiele für Optimierungstechniken zur Verbesserung der Effizienz langsamer Abfragen in MySQL IN-Anweisungen
  • MySQL-Optimierung: Join statt Unterabfrage verwenden
  • Grundlegendes Lernprogramm zu Tabellenunterabfragen und korrelierten Unterabfragen in MySQL
  • MySQL-Hinweise: Einführung in die Verwendung von Unterabfragen
  • Einführung in mehrere gängige Formen von MySQL-Unterabfragen
  • So implementieren Sie Unterabfragen in verschachtelten MySQL-Abfragen

<<:  Tutorial zum Upgrade, zur Installation und Konfiguration des Supervisors auf Centos 6.5

>>:  Detaillierte Erklärung des Vue Notepad-Beispiels

Artikel empfehlen

Detaillierte Erläuterung des Ausführungsprozesses der MySQL-Update-Anweisung

Es gab bereits einen Artikel über den Ausführungs...

Beispielcode für MySQL-Datensicherung und -wiederherstellung

1. Datensicherung 1. Verwenden Sie den Befehl mys...

So verwenden Sie React zur Implementierung einer Bilderkennungs-App

Lassen Sie mich Ihnen zuerst das Effektbild zeige...

Vollständige Schritte zum Bereitstellen von Confluence mit Docker

Confluence ist kostenpflichtig, kann aber für die...

Detaillierte Erläuterung der MySQL-Multitabellen-Joinabfrage

Inhaltsverzeichnis Abfrage zum Verbinden mehrerer...

Ein kurzer Vortrag über die parasitäre Kompositionsvererbung in JavaScript

Vererbung von Kompositionen Kombinationsvererbung...

So stellen Sie MySQL so ein, dass die Groß-/Kleinschreibung nicht beachtet wird

MySQL auf Groß-/Kleinschreibung eingestellt Windo...