Kombinieren Sie Informationen aus mehreren MySQL-Tabellen mit JOIN

Sie können ein verwenden BEITRETEN WÄHLEN abfragen, um Informationen von mehr als einer MySQL-Tabelle zu kombinieren. Mit JOIN, die Tische nebeneinander kombiniert werden, und die Informationen aus beiden Tabellen abgerufen werden.

Die Tische sind durch entsprechende Daten in einer Spalte kombiniert - die Spalte, die sie gemeinsam haben. Die kombinierte Ergebnistabelle durch eine erzeugte Verknüpfung enthält alle Spalten aus beiden Tabellen. Wenn beispielsweise Tabelle 1 hat zwei Spalten (Mitgliedsnummer und Höhe), und Tabelle 2 hat zwei Spalten (Mitgliedsnummer und Gewicht), Ein mit vier Spalten Ergebnisse in einer Tabelle verbinden: Mitgliedsnummer (von Tabelle 1), Höhe, Mitgliedsnummer (von Tabelle 2), und Gewicht.

Die beiden häufigsten Arten von Verknüpfungen sind ein INNER JOIN und ein Outer-Joins. Der Unterschied zwischen einem inneren und äußeren Verknüpfung ist in der Anzahl der Zeilen in der Ergebnistabelle enthalten.

  • INNER JOIN: Die Ergebnistabelle durch einen inneren erzeugten Verknüpfung enthält nur die Zeilen, die in beiden Tabellen vorhanden waren.

  • Outer Join: Die kombinierte Tabelle von einem äußeren erzeugten Verknüpfung enthält alle Zeilen, die mit Leerzeichen in den Spalten für die Zeilen in einer Tabelle vorhanden waren, die nicht in der zweiten Tabelle nicht gab.

Wenn beispielsweise Tabelle 1 enthält eine Zeile für Joe und eine Zeile für Sally und Tabelle 2 nur eine Zeile für Sally enthält, eine innere Verknüpfung enthalten würde nur eine Zeile: die Zeile für Sally. Allerdings verbinden eine äußere zwei Zeilen enthalten würde - eine Zeile für Joe und eine Zeile für Sally - obwohl die Zeile für Joe würde ein leeres Feld haben für Gewicht.

Die Ergebnistabelle für die äußere Verknüpfung enthält alle Zeilen für eine Tabelle. Wenn eine der Zeilen für die Tabelle nicht in der zweiten Tabelle vorhanden ist, sind die Spalten für die zweite Tabelle leer. Offensichtlich werden die Inhalte der Ergebnistabelle bestimmt, durch die Tabelle alle Zeilen beiträgt, die zweite Tabelle erfordert es übereinstimmen.

Zwei Arten von Outer-Joins Steuerung, die Tabelle mit den Zeilen festlegt und die übereinstimmen müssen: a LEFT JOIN und RIGHT JOIN.

Sie verwenden verschiedene WÄHLEN Anfragen für eine innere Verknüpfung und die beiden Arten von Outer-Joins. Die folgende Abfrage ist eine innere Verknüpfung:

SELECT columnnamelist FROM table1, table2WHERE table1.col2 = table2.col2

Und diese Abfragen sind Outer-Joins:

SELECT columnnamelist FROM table1 LEFT JOIN table2ON table1.col1 = table2.col2SELECT columnnamelist VON table1 RIGHT JOIN table2ON table1.col1 = table2.col2

In allen drei Abfragen Tabelle 1 und Tabelle 2 sind die Tabellen verknüpft werden. Sie können mehr als zwei Tabellen verknüpfen. In beiden Abfragen, col1 und col2 arethe Namen der Spalten angepasst werden, um die Tabellen zu verknüpfen. Die Tabellen werden basierend auf den Daten in diesen Spalten abgestimmt. Diese beiden Spalten kann den gleichen Namen oder verschiedenen Namen, aber sie müssen die gleiche Art von Daten enthalten.

Als ein Beispiel für inneren und äußeren verbindet, sollten Sie einen Kleider Katalog mit zwei Tischen. Ein Tisch ist Produkt, mit den beiden Säulen Name und Art Halten Sie die folgenden Daten:

Nennen Sie TypeT-Shirt Blusenkleid Hemd ShirtJeans Hosen

Die zweite Tabelle ist Farbe, mit zwei Spalten Name und Farbe Halten Sie die folgenden Daten:

Name des ColorT-Shirt WhiteT-Shirt redLoaferblack

Sie müssen eine Frage zu stellen, die Informationen aus beiden Tabellen erfordert. Wenn Sie eine innere trete mit der folgenden Abfrage:

SELECT * FROM Produkt, Farbe, bei Product.Name = Color.Name

Sie erhalten die folgenden Ergebnisse Tabelle mit vier Spalten: Name (von Produkt), Art, Name (von Farbe), und Farbe.

Name des Type-Name ColorT-Shirt Hemd-T-Shirt WhiteT-Shirt Hemd-T-Shirt rot

Beachten Sie, dass nur T-Shirt der Ergebnistabelle erscheint in - weil nur T-Shirt in beiden ursprünglichen Tabellen war, vor dem Join. Auf der anderen Seite, dass Sie eine linke äußere trete mit der folgenden Abfrage:

SELECT * FROM Produkt LEFT JOIN Coloron Produkt. Name = Farbe. Name

Sie erhalten die folgenden Ergebnisse Tabelle mit den gleichen vier Säulen - Name (von Produkt), Art, Name (von Farbe), und Farbe - aber mit unterschiedlichen Zeilen:

Name des Type-Name ColorT-Shirt Hemd-T-Shirt WhiteT-Shirt Hemd-T-Shirt reddress Shirt Hemd Jeanshosen 

Diese Tabelle hat vier Reihen. Es hat die gleichen ersten beiden Reihen wie die innere Verknüpfung, aber es hat zwei zusätzliche Reihen - Zeilen, die in der sind Produkt Tabelle links, aber nicht in der Farbe Tabelle. Beachten Sie, dass die Spalten der Tabelle Farbe sind für die letzten beiden Zeilen leer.

Und auf der dritten Seite, nehme an, dass Sie einen rechten Außen trete mit der folgenden Abfrage:

SELECT * FROM Produkt RECHTS Coloron Product.petName = Farbe JOIN. Name

Sie erhalten die folgenden Ergebnisse Tabelle mit den gleichen vier Spalten, aber mit immer noch unterschiedlichen Reihen:

petname petType petname petColorT-Shirt Hemd-T-Shirt WhiteT-Shirt Hemd-T-Shirt rot Loafers Schwarz

Beachten Sie, dass diese Ergebnisse enthalten alle Zeilen für die Farbe Tabelle auf der rechten Seite, aber nicht für die Produkt Tabelle. Beachten Sie die Leerzeichen in den Spalten für die Produkt Tabelle, die eine Reihe haben für nicht Halbschuhe.

Manchmal ist es nützlich, um herauszufinden, welche Zeilen in einer Tabelle in einer anderen Tabelle keine passende Einträge. Angenommen, dass Sie wissen wollen, wer in nie angemeldet hat, um Ihren Members Only Abschnitt. Angenommen, Sie eine Tabelle mit den Login-Namen des Mitglieds haben (Mitglied) Und eine weitere Tabelle mit den Anmeldedaten (Anmeldung).

Sie können diese Frage stellen, indem aus den beiden Tabellen auswählen. Sie können die Login-Namen haben keinen Eintrag finden Sie heraus, in der Anmeldung Tabelle mit der folgenden Abfrage:

SELECT FROM loginname Mitglied LEFT JOIN LoginON Member.loginName = Login.loginNameWHERE Login.loginName NULL IS

Diese Abfrage gibt Ihnen eine Liste aller Login-Namen in der Mitglied Tabelle, die nicht in das sind Anmeldung Tabelle.

Menü