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 des JS-Browserspeichers

Inhaltsverzeichnis Einführung Plätzchen Was sind ...

Warum sollte CSS im Head-Tag platziert werden?

Denken Sie darüber nach: Warum sollte css im head...

Drei Möglichkeiten zum Implementieren eines Textfarbverlaufs in CSS

Bei der Entwicklung von Web-Frontends entwerfen U...

Detaillierte Erklärung der CSS3-Animation und der neuen Funktionen von HTML5

1. CSS3-Animation ☺CSS3-Animationen sind viel ein...

Detaillierte Erläuterung des Fehlerproblems der Case-When-Anweisung

Vorwort In der MySQL-Datenbank verwenden wir manc...

So zeigen Sie den Status von Remote-Serverdateien in Linux an

Wie unten dargestellt: Der Testbefehl stellt fest...

Der einfachste Weg, ein Programm beim Start in Linux automatisch auszuführen

Ich habe viele davon gesammelt, aber alle endeten...

Grafisches Tutorial zur Offline-Installation und Konfiguration von MySQL 8.0.2

Die Offline-Installationsmethode von MySQL_8.0.2 ...

Implementierung einer Bildfragmentierungsladefunktion basierend auf HTML-Code

Heute werden wir einen fragmentierten Bildladeeff...