SQL LEFT JOINSchlüsselwörter
LEFT JOIN ist ein Join-Schlüsselwort in SQL, mit dem Daten aus mehreren Tabellen extrahiert werden.
Der Unterschied zwischen LEFT JOIN und INNER JOIN besteht darin, dass LEFT JOIN alle Datensätze aus der linken Tabelle zurückgibt, selbst wenn es keine übereinstimmenden Datensätze in der rechten Tabelle gibt.
Das LEFT JOIN-Schlüsselwort gibt alle Zeilen aus der linken Tabelle (table1) zurück, selbst wenn es keine Übereinstimmungen in der rechten Tabelle (table2) gibt. Wenn es keine Übereinstimmung in der rechten Tabelle gibt, ist das Ergebnis NULL.
SQL LEFT JOIN-Syntax
SELECT column_name(s) FROM table1 LEFT JOIN table2 ON table1.column_name=table2.column_name;
Oder:
SELECT column_name(s) FROM table1 LEFT OUTER JOIN table2 ON table1.column_name=table2.column_name;
Hinweis:In einigen Datenbanken wird LEFT JOIN als LEFT OUTER JOIN bezeichnet.
- table1: linke Tabelle (Primärtabelle),
LEFT JOINalle Datensätze dieser Tabelle werden beibehalten. - table2: rechte Tabelle (sekundäre Tabelle), wenn keine übereinstimmenden Daten vorhanden sind, verwenden Sie
NULL, um die entsprechenden Spalten zu füllen. - ON table1.column_name=table2.column_name: Geben Sie die Join-Bedingung an, normalerweise das gemeinsame Feld der beiden Tabellen.

Funktionen:
- Gibtalle Datensätze in der linken Tabellezurück, auch wenn die rechte Tabelle keine übereinstimmenden Daten enthält.
- Wenn die rechte Tabelle keinen übereinstimmenden Datensatz hat, werden die Felder der rechten Tabelle für diese Zeile im Ergebnis
NULL。
Angenommen, es gibt zwei Tabellen:CustomersundOrders。
Customers-Tabelle:
| CustomerID | Name |
|---|---|
| 1 | Alice |
| 2 | Bob |
| 3 | Charlie |
| 4 | David |
Orders-Tabelle:
| OrderID | CustomerID | Produkt |
|---|---|---|
| 101 | 1 | Laptop |
| 102 | 2 | Smartphone |
Abfrage mit LEFT JOIN:
SELECT Customers.Name, Orders.Product FROM Customers LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
Abfrageergebnis:
| Name | Produkt |
|---|---|
| Alice | Laptop |
| Bob | Smartphone |
| Charlie | NULL |
| David | NULL |
Erklärung:LEFT JOINzurückgegebenCustomersalle Datensätze in der Tabelle. FürCharlieundDavid, weil inOrdersTabelle gibt es keine passendeCustomerID, ihre entsprechendeProductSpalte istNULL。
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)
SQL LEFT JOIN Beispiel
Die folgende SQL-Anweisung gibt alle Websites und ihre Besuchszahlen zurück (falls vorhanden).
Im folgenden Beispiel verwenden wir Websites als linke Tabelle und access_log als rechte Tabelle:
Beispiel
FROM Websites
LEFT JOIN access_log
ON Websites.id=access_log.site_id
ORDER BY access_log.count DESC;
Nach Ausführung des obigen SQL sind die Ausgabeergebnisse wie folgt:
Hinweis:Das LEFT JOIN-Schlüsselwort gibt alle Zeilen aus der linken Tabelle (Websites) zurück, auch wenn es keine Übereinstimmungen in der rechten Tabelle (access_log) gibt.
Andere Erweiterungen