Detaillierte Erklärung verschiedener Join-Zusammenfassungen von SQL

Detaillierte Erklärung verschiedener Join-Zusammenfassungen von SQL

SQL Left Join, Right Join, Inner Join und Natural Join Zusammenfassung verschiedener Joins

In SQL gibt es verschiedene Joins, darunter Left Join, Right Join, Inner Join und Natural Join. Anfängern ist sicherlich nicht klar, was das ist. Was sind die Unterschiede und Verbindungen zwischen ihnen? Lassen Sie uns dies anhand eines Bildes veranschaulichen:

Das obige Bild veranschaulicht den Unterschied zwischen Left Join, Right Join, Inner Join und Full Outer Join. Lassen Sie uns ein einfaches Beispiel verwenden, um sie zu verstehen und zu unterscheiden. Jetzt gibt es zwei Tabellen: Person und Adresse:

-- Tischperson
+ -- --------+--------------+----------+
| Personen-ID | Vorname | Nachname |
+ -- --------+--------------+----------+
| 1 | Zhang | San |
| 2 | Li | Si |
| 3 | Wang | Wu |
| 4 | Yang | Liu |
+ -- --------+--------------+----------+


--Tabellenadresse
+ ---------- +----------+---------------+-----------+
| Adress-ID | Personen-ID | Stadt | Staat |
+ ---------- +----------+---------------+-----------+
| 1 | 2 | San Francisco | Kalifornien |
| 2 | 3 | Los Angeles | Kalifornien |
| 3 | 1 | San Diego | Kalifornien |
+ ---------- +----------+---------------+-----------+

Sehen wir uns unten jeden einzelnen davon an:

Left Join: Gibt alle Zeilen aus der linken Tabelle (Tabelle 1) mit den entsprechenden Zeilen in der rechten Tabelle (Tabelle 2) zurück. Wenn keine Übereinstimmung vorliegt, ist das Ergebnis auf der rechten Seite NULL.

Linke Schnittmenge: Gibt alle Zeilen der linken Tabelle und die passenden Zeilen der rechten Tabelle zurück. Wenn keine Übereinstimmung vorliegt, verwenden Sie NULL.

Wählen Sie * von Person links aus, und fügen Sie Adresse ein . PersonId = Adresse.PersonId;
+ -- --------+--------------+-----------+---------------+---------------+---------------+---------------+
| Personen-ID | Vorname | Nachname | Adress-ID | Personen-ID | Stadt | Staat |
+ -- --------+--------------+-----------+---------------+---------------+---------------+---------------+
| 2 | Li | Si | 1 | 2 | San Francisco | CA |
| 3 | Wang | Wu | 2 | 3 | Los Angeles | CA |
| 1 | Zhang | San | 3 | 1 | San Diego | CA |
| 4 | Yang | Liu | NULL | NULL | NULL | NULL |
+ -- --------+--------------+-----------+---------------+---------------+---------------+---------------+

Right Join: Gibt alle Zeilen aus der rechten Tabelle (table2) mit den entsprechenden Zeilen in der linken Tabelle (table1) zurück. Wenn keine Übereinstimmung vorliegt, ist das Ergebnis auf der linken Seite NULL.

Rechte Schnittmenge: Gibt alle Zeilen der rechten Tabelle und die passenden Zeilen der linken Tabelle zurück. Wenn keine Übereinstimmung vorliegt, verwenden Sie NULL.

Wählen Sie * aus Person RECHTS JOIN Adresse auf Person.PersonId = Adresse.PersonId;
+ -- --------+--------------+-----------+---------------+---------------+---------------+---------------+
| Personen-ID | Vorname | Nachname | Adress-ID | Personen-ID | Stadt | Staat |
+ -- --------+--------------+-----------+---------------+---------------+---------------+---------------+
| 1 | Zhang | San | 3 | 1 | San Diego | CA |
| 2 | Li | Si | 1 | 2 | San Francisco | CA |
| 3 | Wang | Wu | 2 | 3 | Los Angeles | CA |
| NULL | NULL | NULL | 4 | 5 | Memphis | TN |
+ -- --------+--------------+-----------+---------------+---------------+---------------+---------------+

Inner Join: wählt alle Zeilen aus beiden Tabellen aus, solange eine Übereinstimmung zwischen den Spalten in beiden Tabellen besteht.

Interne Schnittmenge: Wählen Sie die Zeilen aus, in denen die Schlüsselwörter in der linken und rechten Tabelle übereinstimmen.

SELECT * FROM Person INNER JOIN Adresse ON Person.PersonId = Adresse.PersonId; + -- --------+-----------+-----------+-----------+-----------+---------------+---------------+-----------+
| Personen-ID | Vorname | Nachname | Adress-ID | Personen-ID | Stadt | Staat |
+ -- --------+--------------+-----------+---------------+---------------+---------------+---------------+
| 1 | Zhang | San | 3 | 1 | San Diego | CA |
| 2 | Li | Si | 1 | 2 | San Francisco | CA |
| 3 | Wang | Wu | 2 | 3 | Los Angeles | CA |
+ -- --------+--------------+-----------+---------------+---------------+---------------+---------------+

Vollständiger Join: Gibt alle Zeilen aus der linken Tabelle (Tabelle 1) und aus der rechten Tabelle (Tabelle 2) zurück und kombiniert die Ergebnisse der linken und rechten Verknüpfungen.

Vollständige Schnittmenge: Gibt alle Zeilen der linken Tabelle und alle Zeilen der rechten Tabelle zurück, die die Vereinigungsmenge der linken Schnittmenge und der rechten Schnittmenge ist.

Beachten Sie, dass wir, da es in MySQL keinen Full Join-Befehl gibt, die Ergebnisse von Left Join und Right Join auch UNION-verknüpfen können:

SELECT * FROM Person LEFT JOIN Adresse ON Person.PersonId = Adresse.PersonId UNION
SELECT * FROM Person RIGHT JOIN Adresse ON Person.PersonId = Adresse.PersonId; + -- --------+-----------+-----------+-----------+-----------+---------------+---------------+-----------+
| Personen-ID | Vorname | Nachname | Adress-ID | Personen-ID | Stadt | Staat |
+ -- --------+--------------+-----------+---------------+---------------+---------------+---------------+
| 2 | Li | Si | 1 | 2 | San Francisco | CA |
| 3 | Wang | Wu | 2 | 3 | Los Angeles | CA |
| 1 | Zhang | San | 3 | 1 | San Diego | CA |
| 4 | Yang | Liu | NULL | NULL | NULL | NULL |
| NULL | NULL | NULL | 4 | 5 | Memphis | TN |
+ -- --------+--------------+-----------+---------------+---------------+---------------+---------------+

Natural Join: erstellt für Sie eine implizite Join- Klausel basierend auf den gemeinsamen Spalten in den beiden zu verknüpfenden Tabellen. Gemeinsame Spalten sind Spalten, die in beiden Tabellen den gleichen Namen haben. Ein NATURAL JOIN kann ein INNER Join , ein LEFT OUTER Join oder ein RIGHT OUTER Join sein. Der Standardwert ist INNER Join .

Natürliche Schnittmenge: Erstellen Sie eine implizite Verknüpfungsoperation basierend auf den gemeinsamen Spalten der linken und rechten Tabelle. Die gemeinsamen Spalten sind die beiden Spalten mit den gleichen Spaltennamen in den beiden Tabellen. Eine natürliche Kreuzung kann eine Kreuzung nach innen, links oder rechts sein. Die Standardeinstellung ist „intern“.

SELECT * FROM Person NATURAL JOIN Adresse;

+ -- --------+--------------+-----------+---------------+---------------+-----------+
| Personen-ID | Vorname | Nachname | Adress-ID | Stadt | Staat |
+ -- --------+--------------+-----------+---------------+---------------+-----------+
| 1 | Zhang | San | 3 | San Diego | CA |
| 2 | Li | Si | 1 | San Francisco | CA |
| 3 | Wang | Wu | 2 | Los Angeles | CA |
+ -- --------+--------------+-----------+---------------+---------------+-----------+

Beachten Sie abschließend, dass die Schlüsselwörter auf beiden Seiten des Gleichheitszeichens unten gleichwertig sind:

Ein linker Join B = ein linker äußerer Join B
Ein rechter Join B = ein rechter äußerer Join B
Ein vollständiger Join B = ein vollständiger äußerer Join B
Ein innerer Join B = Ein Join B

Dies ist das Ende dieses Artikels mit der detaillierten Erklärung verschiedener Join-Zusammenfassungen von SQL. Weitere relevante Inhalte zu verschiedenen Join-Zusammenfassungen von SQL finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den verwandten Artikeln weiter unten. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Eine kurze Erläuterung des zugrunde liegenden Prinzips von MySQL Join
  • Analyse von Anwendungsszenarien von JOIN in SQL-Anweisungen
  • MySQL-Datenbankgrundlagen - Prinzip der Join-Operation
  • So lösen Sie das Problem des ungültigen linken Joins in MySQL und die Vorsichtsmaßnahmen bei seiner Verwendung
  • Der Prozess der schnellen Konvertierung eines MySQL-Left-Joins in einen Inner-Join
  • Warum erfordern Codestandards, dass SQL-Anweisungen nicht zu viele Verknüpfungen enthalten?
  • MySQL effiziente Abfrage Left Join und Gruppieren nach (plus Index)
  • MySQL-Joinpufferprinzip

<<:  Die tdwidth-Einstellung der Tabelle in mehreren Divs ist gleich und kann nicht ausgerichtet werden

>>:  Kompatibilitätsprobleme mit CSS3-Farbverlaufshintergründen

Artikel empfehlen

Einführung in das Batch-Cache-Löschskript von nginx proxy_cache

Vorwort: Ich habe zuvor den offiziellen Proxy-Cac...

Detaillierte Erläuterung der MySQL-Partitionsfunktion und Beispielanalyse

Zunächst: Was ist Datenbankpartitionierung? Ich h...

JavaScript zum Erreichen eines einfachen Message Board-Falls

Verwenden Sie Javascript, um ein Message Board-Be...

Beispielcode zur Implementierung eines Waben-/Sechseckatlas mit CSS

Ich weiß nicht warum, aber UI gestaltet gerne Wab...

Verwendung des MySQL Query Rewrite-Plugins

Plugin zum Umschreiben von Abfragen Ab MySQL 5.7....

Zugriffsvorgang im MySQL-Befehlszeilenmodus MySQL-Datenbankvorgang

Nutzungsumgebung Geben Sie im cmd-Modus mysql --v...

Design: Ein eigenwilliger Designer

<br />In meiner jahrelangen professionellen ...

So überprüfen Sie die Speichernutzung unter Linux

Bei der Behebung von Systemproblemen, Anwendungsv...