Erläuterung des MySQL-Multitabellen-Join-Abfragebeispiels

Erläuterung des MySQL-Multitabellen-Join-Abfragebeispiels

In tatsächlichen Projekten gibt es Beziehungen zwischen mehreren Tabellen. Es ist unmöglich, alle Daten in einer Tabelle abzurufen. Wenn keine Tabellenverbindung besteht, sind viele Operationen erforderlich. Beispielsweise müssen Sie einschränkende Bedingungen aus Tabelle A finden, um Daten aus Tabelle B abzurufen. Für den Betrieb sind nicht nur mehrere Tabellen erforderlich, auch die Effizienz ist nicht hoch. Beispielsweise heißt es im Buch:

Der Code lautet wie folgt:

FId auswählen
VON T_Kunde
WO FName='MIKE'

Diese SQL-Anweisung gibt 2 zurück, was bedeutet, dass der FId-Wert des Kunden mit dem Namen MIKE 2 ist. Auf diese Weise können wir den Datensatz mit FCustomerId gleich 2 in T_Order abrufen:

Der Code lautet wie folgt:

Wählen Sie FAnzahl,FPreis
VON T_Order
WO FCustomerId=2

Sehen wir uns Tabellenverknüpfungen genauer an. Es gibt viele verschiedene Arten von Tabellenverknüpfungen, darunter Kreuzverknüpfungen (CROSS JOIN), innere Verknüpfungen (INNER JOIN) und äußere Verknüpfungen (OUTTER JOIN).

(1) INNER JOIN: Ein Inner Join verbindet zwei Tabellen und ruft nur die Daten ab, die die Verbindungsbedingungen der beiden Tabellen erfüllen.

Der Code lautet wie folgt:

Wählen Sie o.FId,o.FNumber,o.FPrice,
c.FId,c.FName,c.FAge
VON T_Bestellung o JOIN T_Kunde c
ON o.FCustomerId= c.FId

Hinweis: In den meisten Datenbanksystemen ist INNER in INNER JOIN optional und INNER JOIN ist die Standardverbindungsmethode.

Bei der Verwendung von Tabellenverknüpfungen sind Sie nicht auf die Verknüpfung von nur zwei Tabellen beschränkt, da es viele Fälle gibt, in denen Sie mehrere Tabellen verbinden müssen. Beispielsweise muss die Tabelle T_Order auch eine Verbindung zu den Tabellen T_Customer und T_OrderType herstellen, um die erforderlichen Informationen abzurufen. Sie können die folgende SQL-Anweisung schreiben:

Der Code lautet wie folgt:

Wählen Sie o.FId,o.FNumber,o.FPrice,
c.FId,c.FName,c.FAge
VON T_Bestellung o JOIN T_Kunde c
ON o.FCustomerId= c.FId
INNER JOIN T_Auftragstyp
ON T_Order.FTypeId= T_OrderType.FId

(2) Cross Join: Alle Datensätze aller an einem Cross Join beteiligten Tabellen werden in die Ergebnismenge aufgenommen. Es gibt zwei Möglichkeiten, Cross Joins zu definieren: implizit und explizit.

Schauen wir uns ein implizites Beispiel an:

Der Code lautet wie folgt:

Wählen Sie T_Customer.FId, T_Customer.FName, T_Customer.FAge,
T_Order.FId, T_Order.FNumber, T_Order.FPrice
VON T_Kunde, T_Bestellung

Um einen expliziten Join zu verwenden, müssen Sie CROSS JOIN verwenden, wie unten gezeigt:

Der Code lautet wie folgt:

Wählen Sie T_Customer.FId, T_Customer.FName, T_Customer.FAge,
T_Order.FId, T_Order.FNumber, T_Order.FPrice
VON T_Kunde
CROSS JOIN T_Reihenfolge

(3) Äußerer Join: Ein interner Join erhält nur Daten, die die Join-Bedingungen erfüllen, während ein externer Join hauptsächlich zur Lösung eines solchen Szenarios verwendet wird. Es werden die Daten abgerufen, die die Bedingungen erfüllen. Daran besteht kein Zweifel. Die äußere Verbindung ruft auch einen anderen Teil der Daten ab, d. h. die Daten, die die Bedingungen nicht erfüllen, werden mit NULL aufgefüllt. Schauen wir uns zunächst die Klassifizierung von äußeren Verknüpfungen an: LEFT OUTER JOIN, RIGHT OUTER JOIN und FULL OUTER JOIN.

I. LEFT OUTER JOIN: Wie oben erwähnt, werden Daten, die die Bedingungen nicht erfüllen, mit NULL aufgefüllt. Welche müssen also mit NULL-Werten gefüllt werden? Wenn für den linken äußeren Join die Daten in der linken Tabelle, die die Bedingungen erfüllen, keine entsprechende Entsprechung in der rechten Tabelle haben, müssen die entsprechenden Felder der rechten Tabelle mit NULL-Werten gefüllt werden. Das heißt, der Hauptteil des linken äußeren Join ist die linke Tabelle, und die rechte Tabelle arbeitet mit ihr zusammen.

Der Code lautet wie folgt:

Wählen Sie o.FNummer,o.FPreis,o.FKundenID,
c.Vorname,c.Alter
VON T_Order o
LINKER OUTER JOIN T_Kunde c
EIN o.FCustomerId=c.FId

Hinweis: Wenn Sie einen Left Outer Join verwenden, können Sie die Daten herausfiltern, die nicht mit der Where-Anweisung übereinstimmen.

Der Code lautet wie folgt:

Wählen Sie o.FNummer,o.FPreis,o.FKundenID,
c.Vorname,c.Alter
VON T_Order o
LINKER OUTER JOIN T_Kunde c
EIN o.FCustomerId=c.FId
WO o.FPreis>=150

II. RIGHT OUTER JOIN: Der Right Outer Join ist das Gegenteil des Left Outer Join. Die Felder der linken Tabelle werden mit NULL-Werten gefüllt. Das heißt, das Subjekt des rechten äußeren Join ist die rechte Tabelle und die linke Tabelle kooperiert mit ihr.

Der Code lautet wie folgt:

Wählen Sie o.FNummer,o.FPreis,o.FKundenID,
c.Vorname,c.Alter
VON T_Order o
RECHTER ÄUSSERER JOIN T_Kunde c
EIN o.FCustomerId=c.FId

Hinweis: Wie beim Left Outer Join können Sie die Where-Anweisung verwenden, um zu filtern

III. FULLOUTER JOIN: Ein vollständiger Outer Join ist eine Kombination aus einem Left Outer Join und einem Right Outer Join. Das heißt, es umfasst sowohl die Ergebnismenge des linken äußeren Joins als auch die Ergebnismenge des rechten äußeren Joins.

Der Code lautet wie folgt:

Wählen Sie o.FNummer,o.FPreis,o.FKundenID,
c.Vorname,c.Alter
VON T_Order o
VOLLSTÄNDIGER OUTER JOIN T_Kunde c
EIN o.FCustomerId=c.FId

Das Ergebnis ist äquivalent zu:

Wählen Sie o.FNummer,o.FPreis,o.FKundenID,
c.Vorname,c.Alter
VON T_Order o
LINKER OUTER JOIN T_Kunde c
EIN o.FCustomerId=c.FId
UNION
Wählen Sie o.FNummer,o.FPreis,o.FKundenID,
c.Vorname,c.Alter
VON T_Order o
RECHTER ÄUSSERER JOIN T_Kunde c
EIN o.FCustomerId=c.FId

Mehrere SQL-Anweisungen für Abfragen mehrerer Tabellen: (Das Folgende ist eine Abfrage aus zwei Tabellen <kann auch als Abfrage aus drei Tabellen angesehen werden>, die alle Felder in der Tabelle v_goods anzeigt, das Namensfeld in der Tabelle admin2 als hinzugefügte Person anzeigt und das Namensfeld in der Tabelle admin2 als Operator anzeigt) Abfragen mehrerer Tabellen können gemäß den folgenden drei Beispielen in SQL geschrieben werden

Wählen Sie v.*, (Wählen Sie a.name aus admin2 a, wobei a.adminId = v.loadInId) als aname, (Wählen Sie a.name aus admin2 a, wobei a.adminId = v.operatorId) als uname aus v_goods v, wobei 1 = 1;
WÄHLEN Sie v.*,a.name aname,b.name uname VON v_goods v,admin2 a,admin2 b WO a.adminId=v.loadInId UND b.adminId=v.operatorId;
Wählen Sie v.*, a.name aname, b.name uname aus v_goods v LEFT JOIN admin2 a ON a.adminId = v.loadInId LEFT JOIN admin2 b ON b.adminId = v.operatorId;

Das könnte Sie auch interessieren:
  • Probleme mit Join-Abfragen und Unterabfragen in MySQL
  • Detaillierte Erläuterung der MySQL-Multitabellen-Joinabfrage
  • Welche Arten von MySQL-Verbindungsabfragen kennen Sie?
  • Prinzip und Anwendung der MySQL-Verbindungsabfrage
  • MySQL-Join-Abfragesyntax und Beispiele
  • Detaillierte Erläuterung der Prinzipien und Anwendungsbeispiele von MySQL-Joinabfragen, Union-Abfragen und Unterabfragen
  • Detaillierte Erläuterung des Mysql Self-Join-Abfragebeispiels
  • Detaillierte Erläuterung der MySQL-Verbindungsabfrage

<<:  Tiefgreifendes Verständnis des asynchronen Wartens in Javascript

>>:  Nginx-Lastausgleichsalgorithmus und Failover-Analyse

Artikel empfehlen

Kopieren von Feldern zwischen verschiedenen Tabellen in MySQL

Manchmal müssen wir eine ganze Datenspalte aus ei...

Zabbix benutzerdefinierte Überwachung Nginx Status Implementierungsprozess

Inhaltsverzeichnis Zabbix benutzerdefinierte Über...

Spezifische Verwendung von Bootstrap5-Haltepunkten und Containern

Inhaltsverzeichnis 1. Bootstrap5-Haltepunkte 1.1 ...

Shell-Skripteinstellungen zum Verhindern von Brute-Force-SSH

Das Shell-Skript richtet die Zugriffskontrolle ei...

Ausführliches Tutorial zur Installation von Deepin in VMware15 (Bild und Text)

Vorwort Die Benutzeroberfläche von Deepin sieht w...

Implementierung der QR-Code-Scanfunktion über Vue

Hinweis Auf dieses Plugin kann nur unter dem http...

Detaillierte Erklärung zum Einfügen gängiger Nginx-Befehle in Shell-Skripte

1. Erstellen Sie einen Ordner zum Speichern von N...

JS implementiert einfachen Kalendereffekt

In diesem Artikel wird der spezifische JS-Code zu...

So verwenden Sie mysqldump für vollständige und zeitpunktbezogene Sicherungen

Mysqldump wird für logische Backups in MySQL verw...