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

Implementierungsprinzip der MySQL MyISAM-Standardspeicher-Engine

Standardmäßig generiert die MyISAM-Tabelle drei D...

Navicat für MySql Visueller Import von CSV-Dateien

In diesem Artikel wird der spezifische Code von N...

Entdecken Sie, wie Ihnen eine LED den Einstieg in den Linux-Kernel erleichtert

Inhaltsverzeichnis Vorwort LED-Trigger Entdecken ...

JavaScript zur Implementierung der Funktion zum Ändern des Avatars

In diesem Artikel wird der spezifische JavaScript...

Detaillierte Einführung in die JavaScript-Funktion

Durch Funktionen lassen sich beliebig viele Anwei...

Teilen des JS-nativen Quellcodes des Spiels 2048 (das Neueste im Internet)

Ich habe mich kürzlich mit Algorithmen beschäftig...

Was macht die MySQL-Datenbank?

MySQL ist ein relationales Datenbankverwaltungssy...

Vue3 implementiert CSS unendlichen nahtlosen Scrolleffekt

In diesem Artikelbeispiel wird der spezifische Co...

Beispiel für die Verwendung von UserMap in IMG

usemap ist ein Attribut des <img>-Tags, das ...

So verwenden Sie Echarts zum Visualisieren von Komponenten in Vue

Offizielle Website-Adresse der Echarts-Komponente...

Html+CSS-Zeichnungsdreiecksymbol

Schauen wir uns zunächst die Renderings an: XML/H...

Umfassende Website-Bewertungslösung

<br />Manchmal werden Ihnen möglicherweise F...