Heim > Backend-Entwicklung > PHP-Tutorial > 3 Weitere Verbindungen, mit denen Sie vertraut sein sollten

3 Weitere Verbindungen, mit denen Sie vertraut sein sollten

Joseph Gordon-Levitt
Freigeben: 2025-02-16 13:06:13
Original
522 Leute haben es durchsucht

3 Weitere Verbindungen, mit denen Sie vertraut sein sollten

Key Takeaways

  • Der Artikel erläutert die Verwendung des linken Join, des richtigen Zusammenhangs, des inneren Join und der äußeren Beitrittsanwender mit einem einfachen Beispiel einer Buchdarlehensdatenbank mit zwei Tabellen: Kunden und Bücher.
  • Das Konzept von "links" und "rechts" in SQL -Anschlüssen wird als nichts anderes als Quellenreihenfolge geklärt. Die vor dem Jo -Schlüsselwort erwähnte Tabelle ist die Tabelle "Links" und die nach der rechten Tabelle.
  • Der Artikel führt das Konzept der Verbindungen mit Ausschlüssen vor, die für Abfragen nützlich sind, die die Wörter "nicht" oder "nicht" enthalten. Diese Verbindungen verwenden eine Where -Klausel, um Daten auszuschließen, insbesondere bei der Suche nach Nullwerten.
  • Der äußere Join mit Ausschlüssen wird als nützlich für die Auswahl von Daten ohne Verbindung zwischen Tabellen beschrieben, obwohl sie in MySQL nicht unterstützt wird.
  • Es wird betont, dass die Where -Klausel immer gegen Felder verwendet werden sollte, die nicht als ihren tatsächlichen Wert null haben können. Es wird auch angemerkt, dass Cross -Join ein einzigartiger Join ist, der zu jeder Zeile in Tabelle A zu jeder Zeile in Tabelle B passt.

Es gibt viele Möglichkeiten, Daten aus zwei Datenbanktabellen zu verbinden und die von Ihnen erforderlichen Informationen zu filtern. Craig Buckler schrieb ein beliebtes Stück über Verständnisanglieder; nämlich inner, links, rechts und voll äußerlich. Dieser Artikel ist eine Erweiterung dieses.

Lassen Sie uns diese sehr schnell zusammenfassen. Bild zwei Tabellen, einen für Kunden und eine für Bücher zur Einrichtung einer Buchdarlehensdatenbank.


Kunden Tabelle

id FirstName LastName book_id 1 Joe Schlag 1 2 Jane Damhirschkuh 2 3 Harry Krähe 2 4 Jeffrey Schnee 0

Bücher Tabelle

id Titel 1 Star Wars 2 Jurassic Park 3 Kleine Frauen 4 Tom Sawyer

Die Büchertabelle hat eine Zeile für jedes Buch.

Die Kundentabelle verfügt über eine Zeile für jeden Kunden, der nur ein Buch aus Kredit gleichzeitig haben kann. Wenn sie kein ausleihiges Buch haben, wäre das book_id 0 oder eine leere Zeichenfolge.

Dies ist ein sehr einfaches Beispiel, um die Verbindungen so klar wie möglich zu verstehen!

Eine linke Beitritts hier wäre in dem Fall, in dem Sie eine Frage stellen möchten, wie " zeige mir alle Kunden, einschließlich aller Bücher. "

3 Weitere Verbindungen, mit denen Sie vertraut sein sollten

Sie können im Bild sehen, dass alle Daten im linken Kreis oder in der Tabelle im Ergebnissatz enthalten sind. Nur Daten, die sich aus der Büchertabelle überschneiden, sind aus der rechten Tabelle enthalten. Dies bedeutet, dass bei einem linken Join einige Daten in der rechten Tabelle ausgeschlossen werden können.

Ein Rechtsverbände wäre wie die Frage: "

In diesem Bild sehen Sie, dass alle Daten in der rechten Tabelle im Ergebnissatz enthalten sind. Es sind nur Daten enthalten, die sich aus der Kundentabelle überschneiden. Dies bedeutet, dass bei einem Rechtsverbinden einige Daten in der linken Tabelle ausgeschlossen werden können.

Ein äußerer Join wäre wie zu fragen: " zeig mir alle Kredite und alle Bücher, unabhängig von Verbindungen zwischen ihnen. "

3 Weitere Verbindungen, mit denen Sie vertraut sein sollten

In diesem Bild können Sie feststellen, dass alle Daten aus beiden Tabellen enthalten sind, unabhängig davon, ob sich einige Daten überschneiden. Wenn eine solche Abfrage ausgeführt wird, haben Sie nicht überlappende Daten im Ergebnis, und diese Felder werden auf null gesetzt.

Ein innerer Join wäre wie die Frage: „ nur Kunden mit einem Darlehen zeigen.

3 Weitere Verbindungen, mit denen Sie vertraut sein sollten

Hier sehen Sie, dass Daten sowohl aus den linken als auch von den rechten Tabellen ausgeschlossen werden können. Sie werden keine Kunden sehen, wenn sie kein Buch haben, und Sie werden keine Bücher sehen, wenn sie nicht ausgeliehen werden!

Dies ist die häufigste Art von Daten und das Standardverhalten bei der Verwendung des Schlüsselworts von selbst. Das hinzugefügte Wort „inner“ ist normalerweise nicht erforderlich.

Was bedeutet "links" und "rechts" sowieso?

Sie können sich „links“ und „rechts“ als nichts anderes als Quellreihenfolge vorstellen. Schauen Sie sich diese Abfrage an:

<span>SELECT *
</span><span>FROM customers
</span><span>LEFT JOIN books
</span><span>ON customers.book_id = books.id
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Beachten Sie, dass ich die Tabellenkunden erwähnt habe, bevor ich das Schlüsselwort der Join verwendet habe. Dies bedeutet, dass Kunden mein „links“ -Tisch sind. Eine andere Möglichkeit, darüber nachzudenken, besteht darin, zu fragen, welche Tabelle vom Schlüsselwort der Join links ist und welches rechts davon ist.

Ein paar Einschränkungen:

  • Einfach weil eine Tabelle die "links" ist, bedeutet nicht, dass Sie alle Datensätze auswählen. Dies ist die Funktion des linken Join oder des rechten Join, nicht von Quellenreihenfolge!
  • Die Tabelle, die links ist, enthält zuerst im Ergebnis der Spalten in der Ergebnismenge, sofern Sie im Abschnitt Auswählen speziell Spalten auswählen.
  • Die Reihenfolge der Tabellen nach dem Keyword spielt keine Rolle, sie würde die gleichen Ergebnisse zurückgeben, wenn sie ausgetauscht werden.

genug Überprüfung. Was sind diese neuen Verbindungen?

nun, sie sind nicht „neu“, sie sind nur eine Möglichkeit, zusätzliche Fragen zu befragen. Wie würden Sie Antworten auf Fragen mit den Wörtern "nicht" oder "nicht" in der Abfrage finden?

Zeigen Sie mir alle Kunden, die keine Bücher ausleihen.

Zeigen Sie mir alle Bücher, die nicht ausgeliehen werden.

links Join mit Ausschluss

Schauen Sie sich diese Grafik an. Beachten Sie den Unterschied zu den oben genannten Verknüpfungen im schattierten Bereich.

3 Weitere Verbindungen, mit denen Sie vertraut sein sollten

Dies sieht aus wie ein linker Join, enthält jedoch nicht mehr die "Überlappungsdaten". Warum? Dies ist dasselbe wie die Frage „ zeig mir Kunden, die keine Bücher ausleihen. Wenn Sie klug sind, denken Sie vielleicht, dass Sie einfach die Kundentabelle nach einem Buch von 0 durchsuchen können, um dasselbe zu tun. Das würde in diesem Beispiel funktionieren, aber die meiste Zeit wird es nicht; Es hängt davon ab, wie Ihre Tabellen gestaltet sind.

Die Abfrage sieht so aus:

Wir haben jetzt eine Where -Klausel aufgenommen. Jedes Mal, wenn Sie eine Where -Klausel haben, sind Sie
<span>SELECT *
</span><span>FROM customers
</span><span>LEFT JOIN books
</span><span>ON customers.book_id = books.id
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Daten aus, oder filtern Sie sie fast wie eine Suche. Warum suchen wir nach Büchern. Iid Null? Warum sollte das null sein? Lassen Sie uns den Standard -Links -Join ausführen und die Daten sehen, die sie zurückgeben. Wir haben die Antwort: linke Join Returndaten

id FirstName LastName book_id id1 Titel 1 Joe Schlag 1 1 Star Wars 2 Jane Damhirschkuh 2 2 Jurassic Park 3 Harry Krähe 2 2 Jurassic Park 4 Jeffrey Schnee 0 NULL NULL Können Sie das Problem sehen? Dies ist eine linke Verbindung, die bedeutet, dass alle Daten aus der Kundentabelle unabhängig von der Überschneidung mit Büchern enthalten sind. Jeffrey Snow ist enthalten, aber er hat kein ausgeliehenes Buch. Deshalb werden die Spalten „ID1“ und „Titel“ auf null gesetzt. Wenn die Tabellen verbunden sind, würde es keinen mit ihm verknüpften Buchentitel oder eine Buch -ID geben.

Wenn wir "

Zeigen Sie mir alle Kunden, einschließlich der Bücher, die sie

" zeigen, möchten Sie die oben genannten Daten, da Jeffrey ein Kunde ist, unabhängig davon, ob er ein Buch ausgeliehen hat oder nicht. Das wäre die Funktion eines linken Join in diesem Fall. Wenn wir die Frage "

zeig mir Kunden, die keine Bücher ausleihen

" zeigen, macht es jetzt vollkommen sinnvoll, wonach ich suchen soll. Wir müssen nur Kunden auswählen, bei denen wir Null für die Books.id -Spalte sehen (wenn sie verbunden sind, wird mit ID1 bezeichnet, da es zwei Spalten mit dem Namen "ID" gibt). Wir machen dies mit einem Standard, bei dem wir hinzufügen, wo bucht ist. Iid ist null. Jetzt wird das Ergebnis genau so gefiltert:

id FirstName LastName book_id id1 Titel 4 Jeffrey Schnee 0 NULL NULL Sie haben jetzt alle Kunden, die keine Bücher ausleihen.

Rechts mit Ausschluss

Lassen Sie uns dasselbe mit einem Rechtsverbinden tun. Finden wir alle Bücher, die niemandem ausgeliehen werden.

3 Weitere Verbindungen, mit denen Sie vertraut sein sollten Ein normaler Rechtsverbinden würde jedes Buch zurückgeben, unabhängig davon, ob es ausgeliehen wird, würde das Ergebnis -Set wie folgt aussehen:

id FirstName LastName book_id id1 Titel 1 Joe Schlag 1 1 Star Wars 2 Jane Damhirschkuh 2 2 Jurassic Park 3 Harry Krähe 2 2 Jurassic Park NULL NULL NULL NULL 3 Kleine Frauen NULL NULL NULL NULL 4 Tom Sawyer

Das sieht ein bisschen anders aus. Erstens werden Sie vielleicht bemerken, dass der Jurassic Park zweimal gelistet ist. Dies liegt daran, dass zwei Personen das Buch ausleihen und die Datenbank für jedes Spiel eine Zeile zurückgeben.

Beachten Sie, dass alle entsprechenden Spalten aus der Kundentabelle für kleine Frauen und Tom Sawyer null sind, da niemand diese Titel entlehnt hat, sodass es keine überlappenden Daten gibt.

Wenn wir alle nicht ausgeliehenen Bücher auswählen möchten, verwenden wir nur die Where -Klausel, um „null“ in der Kunden zu finden.

<span>SELECT *
</span><span>FROM customers
</span><span>LEFT JOIN books
</span><span>ON customers.book_id = books.id
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Das Ergebnis sollte vorhersehbar sein. Wir erhalten nur Bücher, die nicht ausgeliehen werden.

id FirstName LastName book_id id1 Titel NULL NULL NULL NULL 3 Kleine Frauen NULL NULL NULL NULL 4 Tom Sawyer Outer Join mit Ausschlüssen

Der letzte Join sieht so aus.

3 Weitere Verbindungen, mit denen Sie vertraut sein sollten

Diese Verbindung ist nicht sehr nützlich, bietet Ihnen jedoch im Wesentlichen eine Liste von beiden Kunden ohne Darlehen und Bücher, die nicht gleichzeitig ausgeliehen werden.

Ein seltsamer Join wie dieser kann in Fällen nützlich sein, in denen Sie buchstäblich Daten ohne Verbindung zwischen Tabellen auswählen müssen. Vielleicht suchen Sie nach Orphan -Daten oder suchen nach Inkonsistenzen in einer alten Datenbank, die Sie konvertiert haben.

In der Tat ist diese Art von Join so seltsam, dass Sie es nicht einmal in MySQL tun können, dass sie nicht den äußeren Join unterstützt. Regular SQL tut und die Abfrage würde so aussehen (MSSQL nicht MySQL):

<span>SELECT *
</span><span>FROM customers
</span><span>LEFT JOIN books
</span><span>ON customers.book_id = books.id
</span>WHERE books.id IS NULL
Nach dem Login kopieren
Das Ergebnis dieser Abfrage würde Daten zurückgeben, die ungefähr so ​​aussehen:

id FirstName LastName book_id id1 Titel 1 Jeffrey Schnee 0 NULL NULL NULL NULL NULL NULL 3 Kleine Frauen NULL NULL NULL NULL 4 Tom Sawyer Sie können mit der Methode, die Craig Buckler mit einer Gewerkschaft erklärt hat, einen äußeren Join erzielen, aber das ist nicht ohne potenzielle Probleme. Das Top -Google -Ergebnis für die Simulation einer vollständigen äußeren Verbindung in MySQL stammt aus dem Jahr 2006 und findet sich hier. Es kann etwas kompliziert werden.

Die Hauptsache, die im obigen Code zu bemerken ist, ist die Überprüfung von Null auf beiden Seiten des Join, da wir von beiden Tabellen ausschließen möchten. Ohne beide Seiten zu überprüfen, haben wir einfach eine der anderen Anschlüsse, über die nur gesprochen wurde.

Unabhängig davon, wie bizarr oder eine Abfrage wie diese unterstützt wurde, wollte ich sie einbeziehen, da es sich um eine gültige Art von Join handelt, wenn Sie sich einen Grund vorstellen können, es zu verwenden.

Andere Gedanken

Sie sollten Ihre Where -Klausel immer gegen Felder verwenden, die nicht als tatsächlichen Wert null haben können! Wir haben immer an den ID -Feldern getestet, die Null als Wert nicht haben können. Stellen Sie sich vor, unsere Büchertisch hätte ein ISBN -Feld, das Null erlaubte. Wenn wir mit dieses -Fiele auf Null getestet würden, würde es Zeilen enthalten, die wir möglicherweise nicht wollen!

Es gibt einen weiteren Join, der als Cross -Join bezeichnet wird und auch seltsam und einzigartig ist. Stellen Sie sich vor, Sie hätten anstatt nur einen Benutzer mit einem Buch abzustimmen, jeder Benutzer wurde mit jedem Buch abgestimmt! Ja, das bedeutet, dass wenn Sie 20 Bücher und 30 Kunden haben, ein Cross -Beitritt zu 30*20 Datenzeilen! Für ein Beispiel dafür, wie dies nützlich sein könnte, lesen Sie diesen Artikel.

Beachten Sie, dass in MySQL der Join, der innere Join und der Cross -Join syntaktische Äquivalente sind und sich gegenseitig ersetzen können. Dies liegt daran, dass Join und Inner Join das Gleiche tun und das On -Keyword verwenden müssen, um Spalten zu entsprechen. Bei der Verwendung eines Cross -Join gibt es kein Keyword, da es in Tabelle A zu jeder Zeile in Tabelle B.

zu jeder Zeile übereinstimmt

Schlussfolgerung

Ich hoffe, diese zusätzlichen Zusammenschlüsse haben für Sie Sinn gemacht. Denken Sie darüber nach, sie jederzeit zu verwenden, wenn Sie nach Daten zwischen Tabellen fragen, in denen etwas "nicht" mit dem anderen übereinstimmt.

  • „Finden Sie alle Kunden, die noch nicht bestellt haben“.
  • „Finden Sie alle Kunden nicht in der Blacklist“.
  • „Finden Sie alle Produkte, die nicht verkauft haben“.
  • „Finden Sie alle Kunden, die nicht Bücher ausleihen“.
  • "Finden Sie alle Hunde, die in letzter Zeit noch nicht gelaufen sind".
  • „Finden Sie Mitarbeiter, die noch nie ein Support -Ticket gesendet haben“.

Zusammenfassend müssen Sie je nach Definition Ihrer Datenbank und Tabellen die WHERE -Klausel verwenden, um die Nullwerte zu überprüfen, um die Übereinstimmungen auszuschließen, anstatt integrieren sie als mit normalem Join -Verhalten.

Also ... haben Sie jemals eine Kreuzung gebraucht? Gibt es noch andere spezifische Anwendungsfälle, über die Sie uns informieren möchten oder die uns abdecken möchten? Lass es uns wissen!

häufig gestellte Fragen (FAQs) zu SQL -Verbindungen

Was sind die verschiedenen Arten von SQL -Verbindungen und wie unterscheiden sie sich voneinander? Es gibt vier grundlegende Arten von SQL -Verbindungen: Innere Join, Links -Join, Right Join und vollständige Join. Der Inner -Join gibt Rekorde zurück, die übereinstimmende Werte in beiden Tabellen enthalten. Der linke Join gibt alle Datensätze aus der linken Tabelle und die übereinstimmenden Datensätze aus der rechten Tabelle zurück. Der rechte Join gibt alle Datensätze aus der rechten Tabelle und die übereinstimmenden Datensätze aus der linken Tabelle zurück. Der vollständige Join gibt alle Datensätze zurück, wenn ein Match in der linken oder in rechten Tabelle vorhanden ist.

Wie verwende ich mehrere Verknüpfungen in SQL? Jede Join -Erklärung muss ihre eigene Klausel haben, die die Bedingungen für die Verbindung angibt. Die Reihenfolge der Join-Anweisungen in Ihrer Abfrage kann die Ergebnisse beeinflussen. Daher ist es wichtig, die Logik Ihrer Abfrage bei der Verwendung mehrerer Verknüpfungen sorgfältig zu berücksichtigen. ? Dies erfolgt mit zwei Join -Anweisungen in Ihrer SQL -Abfrage. Die erste Join -Anweisung kombiniert die ersten beiden Tabellen und die zweite Join -Anweisung kombiniert das Ergebnis der ersten Verbindung mit der dritten Tabelle. Die Reihenfolge der Join -Anweisungen und die in den Abschnitten festgelegten Bedingungen bestimmen, wie die Tabellen kombiniert werden. Der Unterschied zwischen einem linken Join und einem rechten Join in SQL ist die Reihenfolge, in der die Tabellen verbunden sind und die zurückgegebenen Ergebnisse. Ein linker Join gibt alle Datensätze aus der linken Tabelle und die übereinstimmenden Datensätze aus der rechten Tabelle zurück. Wenn es keine Übereinstimmung gibt, ist das Ergebnis auf der rechten Seite null. Auf der anderen Seite gibt ein Rechtsverbindungsanschluss alle Datensätze aus der rechten Tabelle und die übereinstimmenden Datensätze aus der linken Tabelle zurück. Wenn es keine Übereinstimmung gibt, ist das Ergebnis auf der linken Seite null. Jeder Kreis im Diagramm repräsentiert eine Tabelle. Der Bereich, in dem sich die Kreise überlappen, repräsentiert die Aufzeichnungen, die durch die Verbindung zurückgegeben werden. Für eine innere Verbindung wird nur der überlappende Bereich angezeigt. Für eine linke Verbindung werden der gesamte linke Kreis und der überlappende Bereich angezeigt. Für einen Rechtsverbinden werden der gesamte rechte Kreis und der überlappende Bereich angezeigt. Für einen vollständigen Join wird der gesamte Bereich beider Kreise angezeigt. ist ein Match entweder im linken oder im rechten Tisch. Wenn es keine Übereinstimmung gibt, ist das Ergebnis auf beiden Seiten null. Diese Art von Join ist nützlich, wenn Sie alle Datensätze aus beiden Tabellen beibehalten möchten, auch wenn keine Übereinstimmung zwischen den Spalten enthält. 🎜> Ja, Sie können SQL -Verbindungen mit mehr als zwei Tabellen verwenden. Dies erfolgt durch die Verwendung mehrerer Join -Anweisungen in Ihrer SQL -Abfrage. Jede Join -Anweisung kombiniert zwei Tabellen. Um drei Tabellen zu verbinden, verwenden Sie zwei Join -Anweisungen, um vier Tabellen zu verbinden. Sie würden drei Join -Anweisungen verwenden und so weiter.

Wie hoch wirkt sich die Leistung aus, die mehrere Verknüpfungen in SQL? Für jede Verbindungsoperation ist die Verarbeitung von Strom und Speicher erforderlich. Je mehr Verbindungen Sie in Ihrer Abfrage haben, desto mehr Ressourcen sind für die Ausführung der Abfrage erforderlich. Die Leistungsauswirkungen können jedoch durch die Verwendung von Indizes, die Optimierung Ihrer Abfrage und die Verwendung geeigneter Hardware gemindert werden. Ihre SQL -Abfragen, die sich vereinen. Eine Möglichkeit besteht darin, Indizes für die Spalten zu verwenden, die verbunden werden. Dies kann den Verbindungsvorgang erheblich beschleunigen. Eine andere Möglichkeit besteht darin, die Anzahl der Datensätze zu begrenzen, die von der Abfrage mit der WHERE -Klausel zurückgegeben werden. Außerdem kann die Reihenfolge der Join -Anweisungen in Ihrer Abfrage die Leistung beeinflussen. Daher ist es wichtig, die Logik Ihrer Abfrage sorgfältig zu berücksichtigen. > Einige häufige Fehler, die Sie bei der Verwendung von SQL-Anschlüssen vermeiden sollten, beinhalten das Vergessen, die Ein-Klausel anzugeben, die zu einem kartesischen Produkt, der Verbindung zu nicht indizierten Spalten führen kann, die die Abfrageleistung verlangsamen und die falsche Art von Join verwenden können, die können, die kann, die kann, die kann, die kann, die kann, die kann, die kann, die kann, die kann, die kann, die kann, die kann, die kann, die kann, die kann, die kann, die kann, die kann, die kann, die kann, die kann, was kann führen zu falschen Ergebnissen. Es ist auch wichtig zu beachten, dass die Reihenfolge der Join -Anweisungen in Ihrer Abfrage die Ergebnisse beeinflussen kann. Daher ist es wichtig, die Logik Ihrer Abfrage sorgfältig zu berücksichtigen.

Das obige ist der detaillierte Inhalt von3 Weitere Verbindungen, mit denen Sie vertraut sein sollten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage