In der vorherigen Folge dieser MySQL-Serie habe ich gezeigt, wie Sie Daten mit MySQL-Klauseln abrufen können. In diesem Teil lernen wir die Joins-Funktion in MySQL kennen, warum sie verwendet werden und wie man sie benutzt. Fangen wir an.
Wie kann ich zwei Tabellen in MySQL verknüpfen
Mit MySQL-Joins können Sie auf Daten aus mehreren Tabellen zugreifen. Ein MySQL-Join wird immer dann ausgeführt, wenn zwei oder mehr Tabellen in einer SQL-Anweisung verknüpft werden. Zu den MySQL-Joins gehören:der MySQL Inner Join (auch bekannt als Simple Join), der MySQL Left Outer Join (auch Left Join genannt, er gibt übereinstimmende Datensätze aus der linken Tabelle zurück), der Right Join (dieser gibt die übereinstimmenden Datensätze aus der rechte Tabelle) und die vollständige Verknüpfung (dies gibt übereinstimmende Datensätze aus allen Tabellen zurück). Mit MySQL JOINs können Sie mehr als zwei Tabellen verknüpfen.
In MySQL ist der Inner Join der Default Join. Bei gegebenen Schlüsselwörtern werden an diesem Punkt alle Zeilen aus beiden Tabellen ausgewählt, solange es eine Koordinate zwischen den Spalten in beiden Tabellen gibt.
Im Gegensatz zu SQL betrachtet MySQL den Outer Join nicht als separaten Join-Typ. Um die gleichen Ergebnisse wie beim Outer Join zu erhalten, müssen Sie den Left Outer Join und den Right Outer Join verbinden.
Wie viele Tabellen können in MySQL verbunden werden
Laut der offiziellen Dokumentation von MySQL 8.0 beträgt die maximale Anzahl von Tabellen in einer JOIN-Anweisung 61. Beachten Sie jedoch, dass JOIN-Anweisungen viele Serverressourcen erfordern können, wenn die Anzahl der Tabellen zunimmt. Wenn dies bei Ihrer Abfrage der Fall ist, empfehle ich dringend, sie in mehrere Abfragen aufzuteilen, um die Belastung des Servers zu verringern.
Beginnen wir mit dem Hinzufügen einer neuen Tabelle in unserer Datenbank, die die Nachricht zusammen mit der Benutzer-ID enthält, die diese Nachricht gesendet hat, wir nennen sie Nachrichten. Das Schema unserer Tabelle ist:
CREATE TABLE `messages` (
`id` int(11) NOT NULL,
`message` varchar(255) NOT NULL
)
Wir werden dieselbe selectdata-Funktion verwenden die wir in unserer crud.php erstellt haben Datei. Beginnen wir nun damit, diese beiden Tische zu verbinden. Sie können auch Ihren Tisch füllen, damit Sie es üben können.
Hör auf, Zeit auf Servern zu verschwenden
Cloudways übernimmt die Serververwaltung für Sie, damit Sie sich darauf konzentrieren können, großartige Apps zu erstellen und Ihre Kunden zufrieden zu stellen.
Kostenlos startenInnere Verbindung
Inner Join verbindet die Tabelle so, dass nur die Ergebnisse angezeigt werden, die der gegebenen Bedingung entsprechen, und andere ausgeblendet werden. Die Struktur von Inner Join-Abfragen ist:
Spaltenname(n) auswählen
VON Tabelle1
INNER JOIN-Tabelle2
ON tabelle1.spaltenname=tabelle2.spaltenname;
Inner Join und Simple Join sind beide gleich. Sie können Ihre Abfrage auch so schreiben:
Spaltenname(n) auswählen
VON Tabelle1
JOIN table2
ON tabelle1.spaltenname=tabelle2.spaltenname;
Lassen Sie uns nun den Namen und die Nachricht mit Inner Join aus unserer Datenbank abrufen. Die Abfrage sieht folgendermaßen aus
$sql = "SELECT CONCAT(myguests.firstname,' ',myguests.lastname) AS name, myguests.email, messages.message From myguests INNER JOIN messages ON myguests.id = messages.id";
Die CONCAT Funktion wird verwendet, um zwei Zeichenfolgenspalten in MySQL zu verbinden. Öffnen Sie nun Ihre zuvor erstellte index.php und kopieren Sie den folgenden Code hinein.
<table> <tr> <td> Name</td> <td> Email</td> <td> Message</td> <!-- <td> Message</td> <td> Date</td>!--> </tr> <?php include 'crud.php'; $sql = "SELECT CONCAT(myguests.firstname,' ',myguests.lastname) AS name, myguests.email, messages.message From myguests INNER JOIN messages ON myguests.id = messages.id"; $result = selectdata($sql); if($result != "zero") { while($row = $result->fetch_assoc()) { echo "<tr>"; echo "<td>" . $row['name'] . "</td>"; echo "<td>" . $row['email'] . "</td>"; if($row['message'] === null){echo "<td>" . 'null'. "</td>";} else { echo "<td>" . $row['message']. "</td>"; } ; echo "</tr>"; } } else { echo $result; } ?> </table> ?>
Wenn Sie diese Seite auf Ihrem PHP-Webhosting-Server ausführen, sieht Ihr Ergebnis so aus:
Wie Sie deutlich sehen können, wurden nur die Ergebnisse zurückgegeben, die mit user_id und where messages übereinstimmen ist nicht null.
RECHTSVERBINDUNG
RIGHT JOIN verbindet die beiden Tabellen so, dass es alle Werte aus der rechten und übereinstimmenden Werte aus linken Tabellen zurückgibt und auch Null in der linken Tabelle zurückgibt, wenn keine Übereinstimmung gefunden wird. Die Struktur für RIGHT JOIN ist:
Spaltenname(n) auswählen
VON Tabelle1
RIGHT JOIN table2
ON tabelle1.spaltenname=tabelle2.spaltenname;
Lassen Sie uns nun den Namen und die Nachricht aus unserer Datenbank abrufen, indem wir Nachrichten erstellen in unserer rechten Tabelle und myguests in unserer linken Tabelle.
$sql = "SELECT CONCAT(myguests.firstname,' ',myguests.lastname) AS name, myguests.email, messages.message From myguests RIGHT JOIN messages ON messages.id = myguests.id";
Öffnen Sie nun index.php und ersetzen Sie $sql Abfrage mit dem oben. Wenn Sie es ausführen, lautet Ihr Ergebnis:
Wenn Sie sich Nachrichten ansehen In der Tabelle werden Sie einige IDs sehen, die mit keiner Benutzer-ID übereinstimmen, deshalb gibt diese Abfrage null in der Namens- und E-Mail-Spalte zurück, wo sie keine Übereinstimmung in der linken Spalte findet.
LINKSVERBINDUNG
LEFT Joins verbindet die beiden Tabellen so, dass es den gesamten Wert aus der linken und den übereinstimmenden Wert aus der rechten Tabelle zurückgibt und auch Null in der rechten Tabelle zurückgibt, wenn keine Übereinstimmung gefunden wird. Die Struktur für LEFT JOIN ist:
Spaltenname(n) auswählen
VON Tabelle1
LEFT JOIN-Tabelle2
ON tabelle1.spaltenname=tabelle2.spaltenname;
Lassen Sie uns nun den Namen und die Nachricht aus unserer Datenbank abrufen, indem wir Nachrichten in erstellen unser rechter Tisch und meine Gäste herein unser linker Tisch.
$sql = "SELECT CONCAT(myguests.firstname,' ',myguests.lastname) AS name, myguests.email, messages.message From myguests LEFT JOIN messages ON messages.id = myguests.id";
Öffnen Sie nun index.php und fragen Sie anstelle von $sql ab mit oben. Wenn Sie es ausführen, lautet Ihr Ergebnis:
Wenn Sie sich Nachrichten ansehen In der Tabelle finden Sie einige IDs, die mit keiner Benutzer-ID übereinstimmen. Deshalb gibt diese Abfrage in der Spalte "Nachricht" null zurück, wo sie in der rechten Spalte keine Übereinstimmung findet.
UNION
UNION in MySQL wird verwendet, um mehrere Spalten aus verschiedenen Tabellen in einer einzigen Spalte zu vereinen. Die Struktur der UNION-Abfrage zum Auswählen eindeutiger Werte ist:
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
Und zum Auswählen wiederholter Werte aus Spalten gilt:
SELECT column_name(s) FROM table1
ALLE VERBINDEN
SELECT column_name(s) FROM table2;
Lassen Sie uns nun die IDs aus unseren Tabellen abrufen.
$sql = "SELECT id FROM myguests UNION SELECT id FROM messages";
Öffnen Sie nun index.php und ersetzen Sie $sql Abfrage mit dem oben. Wenn Sie es ausführen, wird Ihr Ergebnis sein:
Die Abfrage hat uns alle eindeutigen IDs geliefert, die in beiden Tabellen gefunden werden.
Cross JOIN oder kartesisches Produkt
Diese Art von JOIN gibt das kartesische Produkt von Zeilen aus den Tabellen in Join zurück. Es wird eine Tabelle zurückgegeben, die aus Datensätzen besteht, die jede Zeile der ersten Tabelle mit jeder Zeile der zweiten Tabelle kombinieren.
Cross JOIN-Syntax ist,
SELECT column-name-list from table-name1 CROSS JOIN table-name2;
Selbst beitreten
Ein self JOIN ist ein regulärer Join, aber die Tabelle wird mit sich selbst verknüpft.
SELECT column_name(s) FROM table1 T1, table1 T2 WHERE condition;
FULL OUTER JOIN
Das Schlüsselwort FULL OUTER JOIN gibt alle Datensätze zurück, wenn es eine Übereinstimmung in den linken (Tabelle1) oder rechten (Tabelle2) Tabellendatensätzen gibt.
Hinweis:FULL OUTER JOIN kann möglicherweise sehr große Ergebnismengen zurückgeben!
SELECT column_name(s) FROM table1 FULL OUTER JOIN table2 ON table1.column_name = table2.column_name;
Mehreren Tischen beitreten
In den vorherigen Blogs haben Sie gelernt, wie Sie zwei Tabellen mithilfe verschiedener SQL-Join-Abfragen verbinden. Wenn Sie jedoch an einer großen Anwendung arbeiten, z. B. einen E-Commerce-Shop aufbauen und darin mehrere Tabellen wie Kunden, Bestellungen und Produkte erstellen, kann die Komplexität beim Zusammenführen von Tabellen durchaus zunehmen. Um dies zu klären, müssen Sie alle Produkte erhalten, die von bestimmten Kunden bestellt wurden. Das Schema bleibt gleich, daher erkläre ich es hier nicht. Sehen wir uns die Abfrage an:
SELECT * FROM table1 LEFT JOIN table2 ON table2.id = table1.id LEFT JOIN table3 ON table3.id = table1.id
Wir verknüpfen zuerst Tabelle 1 und Tabelle 2, die eine temporäre Tabelle mit kombinierten Daten aus Tabelle1 und Tabelle2 liefern, die an diesem Punkt mit Tabelle3 verknüpft wird. Diese Gleichung kann auf mehr als 3 Tabellen auf N Tabellen erweitert werden. Sie müssen nur sicherstellen, dass die SQL-Abfrage N-1 Join-Anweisungen haben sollte, um N Tabellen zu verknüpfen.
Die obige Abfrage ermöglicht es Ihnen, die Zeilen von Tabelle1 (in jedem Fall) mit den Zeilen der anderen beiden Tabellen abzugleichen. Mit LEFT JOIN können Sie Tabelle2 und Tabelle3 mit Tabelle1 verknüpfen (nicht nur Tabelle2 mit Tabelle1 und Tabelle3 mit Tabelle2).
Sie können auch Bedingungen wie WHERE, AND und ORDERBY hinzufügen
SELECT * FROM table1 LEFT JOIN table2 ON table2.id = table1.id LEFT JOIN table3 ON table3.id = table2.id WHERE month = 'numberHere' AND (table2.email IS NOT NULL OR table3.email IS NOT NULL) ORDER BY submitdate DESC
Schlussfolgerung:
In diesem Tutorial haben wir etwas über Joins gelernt, die häufig in relationalen Datenbanken verwendet werden. Joins werden nicht nur für zwei Tabellen verwendet, und Sie können mehr als zwei Tabellen mit derselben Technik verbinden. Im achten und letzten Teil dieser MySQL-Serie werde ich erläutern, wie Sie reguläre Ausdrücke (REGEX) zum Abrufen und Sortieren von Daten in MySQL verwenden. Abonnieren Sie dazu unseren Blog-Newsletter und Sie können sich auch für unseren Managed PHP Stack anmelden und mit dem Testen dieser Tutorials auf unseren PHP-optimierten Servern beginnen.
Häufig gestellte FragenF. Wie füge ich zwei Tische zusammen?
Antwort: Das Verbinden von zwei Tabellen in SQL kann auf vier Arten erfolgen:Inner Join (gibt Zeilen mit übereinstimmenden Spalten zurück), Left Join (ALLE Datensätze in der linken Tabelle und übereinstimmende Datensätze in der rechten Tabelle), Right Join (ALLE Datensätze in der rechten Tabelle und übereinstimmende Datensätze in der linken Tabelle) und Union (entfernt Duplikate).
F. Welchen SQL-Befehl können Sie verwenden, um zwei Tabellen zu verknüpfen?
Antwort: Zwei Tabellen können mit der INNER JOIN-Anweisung verbunden werden, die übereinstimmende Datensätze aus beiden Tabellen zurückgibt.
F. Wie verbinde ich zwei Tabellen in SQL ohne Joins?
Antwort: Sie können die folgende Anweisung verwenden, um Tabellen zu verknüpfen, ohne tatsächlich die JOIN-Anweisung
zu verwendenSELECT * FROM TableA a, TableB b