Ein einfaches Beispiel für eine gemeinsame MySQL-Tabellenabfrage

Ein einfaches Beispiel für eine gemeinsame MySQL-Tabellenabfrage

MySql verwendet verknüpfte Tabellenabfragen, die für Anfänger möglicherweise schwer zu verstehen sind. Der folgende Artikel gibt Ihnen eine detaillierte Einführung in den relevanten Inhalt der MySQL-Verbindungstabellenabfrage und stellt ihn Ihnen zu Referenz- und Lernzwecken zur Verfügung. Schauen wir uns gemeinsam die detaillierte Einführung an.

In einer relationalen Datenbank ist es unvermeidlich, dass es verschiedene Referenzen und Assoziationen zwischen Tabellen gibt. Diese Assoziationen werden durch die Paarung von Primärschlüsseln mit Fremdschlüsseln gebildet. Daher kann beim Abrufen von Daten in den meisten Fällen eine einzelne Tabelle die Anforderungen nicht erfüllen. Um zusätzliche Daten abzurufen, müssen der Abfrage weitere Tabellen hinzugefügt werden. Dies ist die Operation, die mit dem Schlüsselwort JOIN abgeschlossen wird.

  • In MySQL haben JOIN, CROSS JOIN und INNER JOIN dieselbe Syntax und Funktion und sind austauschbar. Im SQL-Standard muss INNER JOIN jedoch mit der ON-Anweisung verwendet werden.

Wenn Sie mehrere Tabellen abfragen, können Sie das Schlüsselwort JOIN weglassen und mehrere Tabellen durch Kommas trennen. In diesem Fall wird es standardmäßig als INNER JOIN behandelt. Zum Beispiel,

SELECT Tabelle1.*, 
  Tabelle2.* 
VON Tabelle1, 
  Tabelle2;

ist gleichbedeutend mit:

SELECT Tabelle1.*, 
  Tabelle2.* 
VON Tabelle1 
  INNER JOIN Tabelle2;
  • Allerdings hat diese implizit durch Kommas angegebene Form der Join-Tabelle eine niedrigere Priorität als die direkt durch Schlüsselwörter (INNER JOIN, CROSS JOIN, LEFT JOIN) angegebene Form. Daher wird t1, t2 JOIN t3 als (t1, (t2 JOIN t3)) analysiert, statt als ((t1, t2) JOIN t3).

Es ist zu beachten, dass bei der Kombination der Kommaform mit anderen Join-Table-Schlüsselwörtern ein Fehler gemeldet wird, wenn die Join-Table-Bedingung angegeben wird, beispielsweise durch die ON-Bedingung.

  • Die Syntax der durch ON angegebenen gemeinsamen Tabellenbedingung ist dieselbe wie die von WHERE. Für ON können alle für letzteres akzeptablen Ausdrücke verwendet werden. Die beiden scheinen ähnliche Funktionen zu haben. ON wird im Allgemeinen verwendet, um die Verknüpfungsbedingung anzugeben, d. h. wie die Tabellen verknüpft werden, während WHERE zum Filtern der Ergebnisse verwendet wird.
  • Wenn bei LEFT JOIN die rechte Tabelle die durch ON oder USING angegebenen Bedingungen nicht erfüllt, wird sie im Ergebnis als NULL dargestellt.
Wählen Sie left_tbl.*
 VON left_tbl LEFT JOIN right_tbl ON left_tbl.id = right_tbl.id
 WO right_tbl.id NULL IST;

Mit dieser Methode können Datensätze in der richtigen Tabelle einfach herausgefiltert werden, die die Bedingungen nicht erfüllen.

  • Beim Abfragen einer gemeinsamen Tabelle können Sie für jede beteiligte Tabelle einen Alias ​​angeben, um die Referenzierung in anderen Ausdrücken zu erleichtern. Es gibt zwei Möglichkeiten: Eine erfolgt über das AS-Schlüsselwort tbl_name AS alias_name, die andere besteht darin, dem Tabellennamen direkt den Alias ​​tbl_name alias_name folgen zu lassen.
Wählen Sie t1.name, t2.gehalt
 VON Mitarbeiter ALS t1 INNER JOIN Info ALS t2 AUF t1.name = t2.name;

Wählen Sie t1.name, t2.gehalt
 VON Mitarbeiter t1 INNER JOIN Info t2 AUF t1.name = t2.name;
  • Eine Unterabfrage in einer Abfrageanweisung muss einen Alias ​​haben, damit in anderen Ausdrücken darauf verwiesen werden kann.
AUSWÄHLEN * AUS (AUSWÄHLEN 1, 2, 3) ALS t1;
  • Die Anweisung USING(join_column_list) gibt die in beiden Tabellen enthaltenen Spalten an. Bei der Abfrage werden nur die hier angegebenen Spalten verglichen.
a LINKS VERBINDEN b MIT (c1, c2, c3)
  • NATURAL [LEFT] JOIN ist gleichwertig mit INNER JOIN und LEFT JOIN mit USING unter Angabe aller Spalten in der Tabelle.
  • RIGHT JOIN ähnelt LEFT JOIN, mit dem Unterschied, dass das Endergebnis auf der rechten Tabelle basiert und die Daten, die nicht mit der linken Tabelle übereinstimmen, im Ergebnis als NULL dargestellt werden. Um die Migration zwischen verschiedenen Datenbanken zu erleichtern, wird empfohlen, immer LEFT JOIN zu verwenden.

Einige JOIN-Beispiele:

SELECT * FROM Tabelle1, Tabelle2;

SELECT * FROM Tabelle1 INNER JOIN Tabelle2 ON Tabelle1.id = Tabelle2.id;

SELECT * FROM Tabelle1 LEFT JOIN Tabelle2 ON Tabelle1.id = Tabelle2.id;

Wählen Sie * aus Tabelle1 links mit „Join“ Tabelle2 mithilfe von (ID);

SELECT * FROM Tabelle1 LEFT JOIN Tabelle2 ON Tabelle1.id = Tabelle2.id
 LEFT JOIN Tabelle3 ON Tabelle2.id = Tabelle3.id;
  • Im Ergebnis eines NATURAL JOIN gibt es keine doppelten Spalten. Da es USING ähnelt, gibt es bei USING keine komplexen Spalten.

Betrachten Sie das folgende Beispiel:

TABELLE ERSTELLEN t1 (i INT, j INT);
TABELLE ERSTELLEN t2 (k INT, j INT);
EINFÜGEN IN t1 WERTE(1, 1);
EINFÜGEN IN t2 WERTE(1, 1);
Wählen Sie * aus t1 NATURAL JOIN t2;
Wählen Sie * aus t1, verbinden Sie t2 mit (j);

Abfrageergebnisse:

+------+------+------+
| G | G |
+------+------+------+
| 1 | 1 | 1 |
+------+------+------+
+------+------+------+
| G | G |
+------+------+------+
| 1 | 1 | 1 |
+------+------+------+

Spalten mit dem gleichen Namen kommen im Ergebnis nur einmal vor und es handelt sich bei allen um Datensätze mit dem gleichen Wert.

Durch Einfügen eines neuen Datensatzes in die beiden Tabellen sorgen Sie für einen Unterschied zwischen den j-Werten und testen Sie ihn anschließend.

mysql> INSERT INTO t1 VALUES(2, 2);
Abfrage OK, 1 Zeile betroffen (0,00 Sek.)

mysql> INSERT INTO t2 VALUES(2, 3);
Abfrage OK, 1 Zeile betroffen (0,00 Sek.)

mysql> wähle * von t1 natürlicher Join t2;
+------+------+------+
| G | G |
+------+------+------+
| 2 | 2 | 1 |
+------+------+------+
1 Zeile im Satz (0,00 Sek.)
  • Bei der Verwendung von USING und ON als Bedingungen sind die gemeinsamen Bedingungen anderer Einschränkungen gleich und können ineinander umgewandelt werden. Es gibt jedoch immer noch Unterschiede, wenn SELECT * Ergebnisse zurückgibt. Ersteres gibt die zusammengeführten Ergebnisse nur in den in USING angegebenen Spalten zurück, während Letzteres auf alle Spalten in der Tabelle abzielt.
a LINKS VERBINDEN b MIT (c1, c2, c3)
a LEFT JOIN b AUF a.c1 = b.c1 UND a.c2 = b.c2 UND a.c3 = b.c3

Gibt im USING-Fall zurück:

COALESCE(a.c1, b.c1), COALESCE(a.c2, b.c2), COALESCE(a.c3, b.c3)

ON gibt zurück:

a.c1, a.c2, a.c3, b.c1, b.c2, b.c3

In der ON-Anweisung können nur Tabellen in der Operationstabelle (Operanden) referenziert werden.

TABELLE ERSTELLEN t1 (i1 INT);
TABELLE ERSTELLEN t2 (i2 INT);
TABELLE ERSTELLEN t3 (i3 INT);

Für die obige Tabelle meldet die folgende Abfrage einen Fehler:

mysql> AUSWÄHLEN * VON t1 JOIN t2 AUF (i1 = i3) JOIN t3;
FEHLER 1054 (42S22): Unbekannte Spalte „i3“ in „on-Klausel“

Die folgende Abfrage funktioniert:

mysql> AUSWÄHLEN * VON t1 JOIN t2 JOIN t3 AUF (i1 = i3);
Leerer Satz (0,00 Sek.)

Denn jetzt liegt t3 im Arbeitsbereich der ON-Anweisung.

Verwandte Ressourcen

  • MySQL 8.0 Referenzhandbuch - 13.2.10.2 JOIN Syntax
  • MySQL 8.0 Referenzhandbuch - 13.2.10.3 UNION-Syntax

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM.

Das könnte Sie auch interessieren:
  • Analyse einfacher Anwendungsbeispiele für abgeleitete MySQL-Tabellen (abgeleitete Tabellen)
  • Optimierungsmethode für verschachtelte MySQL-Abfragen und gemeinsame Tabellenabfragen
  • Syntaxeinführung zum Aktualisieren und Löschen gemeinsamer Tabellen in MySQL
  • Grundlegende MySQL-Tabellenabfragen – häufige Fehler beim Left-Join
  • Tatsächlicher Prozess der Abfrage abgeleiteter Tabellen in MySQL

<<:  Detaillierte Erklärung der Verwendung des Linux-Befehls nslookup

>>:  Analyse des Idea-Compiler-Vue-Einrückungsfehlerproblemszenarios

Artikel empfehlen

Detaillierte Erklärung von mktemp, einem grundlegenden Linux-Befehl

mktemp Erstellen Sie auf sichere Weise temporäre ...

Die letzten zwei Jahre mit User Experience

<br />Es ist nicht länger als zwei Jahre her...

js, um die Produktionsmethode des Karussells zu realisieren

In diesem Artikel wird der spezifische Code für j...

Diagramm zur Installation von VMware 14 unter Windows 10

Software-Download Link zum Herunterladen der Soft...

MySQL 5.6.23 Installations- und Konfigurations-Umgebungsvariablen-Tutorial

In diesem Artikel finden Sie das Installations- u...

Der Unterschied zwischen distinct und group by in MySQL

Einfach ausgedrückt wird distinct zum Entfernen v...

Beispiel für asynchronen Dateiupload in HTML

Code kopieren Der Code lautet wie folgt: <form...

web.config (IIS) und .htaccess (Apache) Konfiguration

xml <?xml version="1.0" encoding=&qu...

Zusammenfassung gängiger Toolbeispiele in MySQL (empfohlen)

Vorwort Dieser Artikel stellt hauptsächlich die r...

mysql5.7.21.zip Installations-Tutorial

Der detaillierte Installationsprozess von mysql5....

Schritte zum Erstellen eines CentOS-Containers über Docker

Inhaltsverzeichnis Vorwort Erstellen Sie ein Brüc...

Detaillierte Erklärung des JavaScript-Proxy-Objekts

Inhaltsverzeichnis 1. Was ist ein Proxy? 2. Wie w...