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

Vue3.0 Adaptiver Betrieb von Computern mit unterschiedlichen Auflösungen

Zuerst müssen wir einige Abhängigkeiten installie...

CSS-Benennung: BEM, Scoped CSS, CSS-Module und CSS-in-JS erklärt

Der Anwendungsbereich von CSS ist global. Wenn da...

Was tun, wenn Sie das ursprüngliche Passwort für MySQL auf dem MAC vergessen?

Die Methode zur Lösung des Problems, das anfängli...

Ausführliche Erklärung zu MySQL vom Einstieg bis zum Aufgeben - Installation

Was Sie lernen werden 1. Softwareinstallation und...

So verwenden Sie CSS-Attributselektoren zum Spleißen von HTML-DNA

CSS-Attributselektoren sind großartig. Sie können...

CentOS7 64-Bit-Installation MySQL Grafik-Tutorial

Voraussetzungen für die Installation von MySQL: I...

Unterschied zwischen den Methoden querySelector und getElementById in JS

Inhaltsverzeichnis 1. Übersicht 1.1 Verwendung vo...

So leiten Sie über den Nginx-Lastausgleich zu https um

Kopieren Sie das Zertifikat und den Schlüssel im ...

Einführung in ApplicationHost.config (IIS-Speicherkonfigurationsbereichsdatei)

Nehmen Sie für eine neu erstellte Website ASP.NET...

Die Prinzipien und Mängel der MySQL-Volltextindizierung

Der MySQL-Volltextindex ist ein spezieller Index,...