SQL JOIN
SQL JOIN wird verwendet, um Zeilen aus zwei oder mehr Tabellen zu kombinieren.
Das folgende Diagramm zeigt die 7 Verwendungen im Zusammenhang mit LEFT JOIN, RIGHT JOIN, INNER JOIN und OUTER JOIN.
| Type | Beschreibung |
|---|---|
| INNER JOIN | Gibt Datensätze zurück, die die Join-Bedingung in beiden Tabellen erfüllen (Schnittmenge). |
| LEFT JOIN | Gibt alle Datensätze aus der linken Tabelle zurück, auch wenn es keine übereinstimmenden Datensätze in der rechten Tabelle gibt (behält die linke Tabelle bei). |
| RIGHT JOIN | Gibt alle Datensätze aus der rechten Tabelle zurück, auch wenn es keine übereinstimmenden Datensätze in der linken Tabelle gibt (behält die rechte Tabelle bei). |
| FULL OUTER JOIN | Gibt die Vereinigung beider Tabellen zurück, einschließlich übereinstimmender und nicht übereinstimmender Datensätze. |
| CROSS JOIN | Gibt das kartesische Produkt der beiden Tabellen zurück, wobei jeder Datensatz der linken Tabelle mit jedem Datensatz der rechten Tabelle kombiniert wird. |
| SELF JOIN | Verbindet eine Tabelle mit sich selbst. |
| NATURAL JOIN | Gleicht Tabellen automatisch ab und verknüpft sie anhand von Feldern mit demselben Namen. |
Beispieldaten
Tabelle 1: Customers
| CustomerID | Name |
|---|---|
| 1 | Alice |
| 2 | Bob |
| 3 | Charlie |
Tabelle 2: Orders
| OrderID | CustomerID | Produkt |
|---|---|---|
| 101 | 1 | Laptop |
| 102 | 2 | Telefon |
| 103 | 4 | Tablet |
Vergleich von Join-Ergebnissen
| JOIN-Typen | Ergebnis |
|---|---|
| INNER JOIN | Gibt Datensätze zurück, die in beiden Tabellen übereinstimmen. Im angegebenen Beispiel haben nur Datensätze mit CustomerID 1 und 2 Übereinstimmungen in beiden Tabellen, daher werden nur diese Datensätze zurückgegeben. |
| LEFT JOIN | Gibt alle Datensätze aus der linken Tabelle (Customers) zurück, auch wenn es keine übereinstimmenden Datensätze in der rechten Tabelle (Orders) gibt. Für Datensätze der linken Tabelle, die keine Übereinstimmung in der rechten Tabelle haben, sind die Felder der rechten Tabelle im Ergebnis NULL. Im Beispiel hat der Datensatz mit CustomerID 3 keine Übereinstimmung in der rechten Tabelle, daher ist das entsprechende Product NULL. |
| RIGHT JOIN | Gibt alle Datensätze aus der rechten Tabelle (Orders) zurück, auch wenn es keine übereinstimmenden Datensätze in der linken Tabelle (Customers) gibt. Für Datensätze der rechten Tabelle, die keine Übereinstimmung in der linken Tabelle haben, sind die Felder der linken Tabelle im Ergebnis NULL. Im Beispiel hat der Datensatz mit OrderID 103 keine Übereinstimmung in der linken Tabelle, daher ist der entsprechende Name NULL. |
| FULL OUTER JOIN | Gibt alle Datensätze aus beiden Tabellen zurück, unabhängig davon, ob sie übereinstimmen oder nicht. Wenn eine Tabelle keine übereinstimmenden Datensätze hat, sind ihre Felder NULL. Im Beispiel werden die Datensätze mit CustomerID 3 und OrderID 103 jeweils in der anderen Tabelle als NULL angezeigt. |
| CROSS JOIN | Gibt das kartesische Produkt der beiden Tabellen zurück, das heißt, jede Zeile in der linken Tabelle wird mit jeder Zeile in der rechten Tabelle kombiniert. Im Beispiel wird jeder Kunde mit jeder Bestellung kombiniert, was mehrere Ergebnisse erzeugt. |
| SELF JOIN | Verbindet eine Tabelle mit sich selbst. Dies wird normalerweise verwendet, um miteinander in Beziehung stehende Datensätze in einer Tabelle abzufragen, wie die Beziehung zwischen Mitarbeitern und ihren Managern. |
SQL JOIN
Die SQL-JOIN-Klausel wird verwendet, um Zeilen aus zwei oder mehr Tabellen basierend auf gemeinsamen Feldern zwischen diesen Tabellen zu kombinieren.
Die häufigsten JOIN-Typen:SQL INNER JOIN (einfacher JOIN)SQL INNER JOIN gibt alle Zeilen aus mehreren Tabellen zurück, die die JOIN-Bedingung erfüllen.
Syntax:
SELECT column1, column2, ... FROM table1 JOIN table2 ON condition;
Parameter description:
- column1, column2, ...: Die Namen der auszuwählenden Felder; es können mehrere Felder sein. Wenn keine Feldnamen angegeben werden, werden alle Felder ausgewählt.
- table1: Die erste zu verbindende Tabelle.
- table2: Die zweite Tabelle, die verknüpft werden soll.
- condition: Die Verknüpfungsbedingung, die angibt, wie verknüpft werden soll.
Demo-Datenbank
In diesem Tutorial verwenden wir die Beispieldatenbank EXAMPLE.
Nachfolgend sind die Daten aufgeführt, die aus der Tabelle "Websites" ausgewählt wurden:
+----+--------------+---------------------------+-------+---------+ | id | name | url | alexa | country | +----+--------------+---------------------------+-------+---------+ | 1 | Google | https://www.google.cm/ | 1 | USA | | 2 | 淘宝 | https://www.taobao.com/ | 13 | CN | | 3 | Example | http://www.example.com/ | 4689 | CN | | 4 | 微博 | http://weibo.com/ | 20 | CN | | 5 | Facebook | https://www.facebook.com/ | 3 | USA | | 7 | stackoverflow | http://stackoverflow.com/ | 0 | IND | +----+---------------+---------------------------+-------+---------+
Im Folgenden sind die Daten aus der Zugriffsprotokoll-Tabelle "access_log" der Website aufgeführt:
mysql> SELECT * FROM access_log; +-----+---------+-------+------------+ | aid | site_id | count | date | +-----+---------+-------+------------+ | 1 | 1 | 45 | 2016-05-10 | | 2 | 3 | 100 | 2016-05-13 | | 3 | 1 | 230 | 2016-05-14 | | 4 | 2 | 10 | 2016-05-14 | | 5 | 5 | 205 | 2016-05-14 | | 6 | 4 | 13 | 2016-05-15 | | 7 | 3 | 220 | 2016-05-15 | | 8 | 5 | 545 | 2016-05-16 | | 9 | 3 | 201 | 2016-05-17 | +-----+---------+-------+------------+ 9 rows in set (0.00 sec)
Beachten Sie, dass die Spalteidin der Tabelle „Websites“ auf das Feldsite_idin der Tabelle „access_log“ verweist. Die beiden obigen Tabellen sind über die Spalte „site_id“ verknüpft.
Wenn wir dann die folgende SQL-Anweisung ausführen (die INNER JOIN enthält):
Beispiele
FROM Websites
INNER JOIN access_log
ON Websites.id=access_log.site_id;
Die Ausführung der obigen SQL liefert das folgende Ergebnis:
Verschiedene SQL-JOINs
Bevor wir mit Beispielen fortfahren, listen wir zunächst die verschiedenen SQL-JOIN-Typen auf, die Sie verwenden können:
- INNER JOIN: Gibt Zeilen zurück, wenn es mindestens eine Übereinstimmung in der Tabelle gibt
- LEFT JOIN: Gibt alle Zeilen aus der linken Tabelle zurück, auch wenn es keine Übereinstimmungen in der rechten Tabelle gibt
- RIGHT JOIN: Gibt alle Zeilen aus der rechten Tabelle zurück, auch wenn es keine Übereinstimmungen in der linken Tabelle gibt
- FULL JOIN: Gibt Zeilen zurück, solange es eine Übereinstimmung in einer der Tabellen gibt
