Heim  >  Artikel  >  Datenbank  >  Was ist der Hauptunterschied zwischen MySQL JOIN und LEFT JOIN?

Was ist der Hauptunterschied zwischen MySQL JOIN und LEFT JOIN?

Susan Sarandon
Susan SarandonOriginal
2024-11-16 13:05:03390Durchsuche

What's the Key Difference Between MySQL JOIN and LEFT JOIN?

Den Unterschied zwischen MySQL JOIN und LEFT JOIN verstehen

MySQL JOIN ist eine grundlegende Operation, die Zeilen aus zwei oder mehr Tabellen basierend auf a kombiniert gemeinsame Spalte. Standardmäßig führt MySQL INNER JOINs aus, die nur die Zeilen zurückgeben, die in allen verknüpften Tabellen übereinstimmen.

Es kommt jedoch zu einem häufigen Missverständnis, wenn Benutzer davon ausgehen, dass das Fehlen eines expliziten Join-Typs einen LEFT JOIN impliziert. Dies ist nicht der Fall; Der Standard-Join-Typ bleibt INNER JOIN.

Beispiel für LEFT JOIN vs. INNER JOIN

Betrachten Sie die folgende Abfrage:

SELECT
    `DM_Server`.`Jobs`.*,
    `DM_Server`.servers.Description AS server,
    digital_inventory.params,
    products.products_id,
    products.products_pdfupload,
    customers.customers_firstname,
    customers.customers_lastname
FROM `DM_Server`.`Jobs`
    INNER JOIN `DM_Server`.servers ON servers.ServerID = Jobs.Jobs_ServerID
    JOIN `cpod_live`.`digital_inventory` ON digital_inventory.jobname = Jobs.Jobs_Name
    JOIN `cpod_live`.`products` ON products.products_pdfupload = CONCAT(digital_inventory.jobname, ".pdf")
    JOIN `cpod_live`.`customers` ON customers.customers_id = products.cID
ORDER BY `DM_Server`.`Jobs`.Jobs_StartTime DESC LIMIT 50

Diese Abfrage wird ausgeführt ein INNER JOIN für alle Tabellen, der nur die Zeilen zurückgibt, die übereinstimmende Werte in allen verbundenen Tabellen haben.

Jetzt ändern wir die Abfrage, um LEFT JOINs zu verwenden:

SELECT
    `DM_Server`.`Jobs`.*,
    `DM_Server`.servers.Description AS server,
    digital_inventory.params,
    products.products_id,
    products.products_pdfupload,
    customers.customers_firstname,
    customers.customers_lastname
FROM `DM_Server`.`Jobs`
    LEFT JOIN `DM_Server`.servers ON servers.ServerID = Jobs.Jobs_ServerID
    LEFT JOIN `cpod_live`.`digital_inventory` ON digital_inventory.jobname = Jobs.Jobs_Name
    LEFT JOIN `cpod_live`.`products` ON products.products_pdfupload = CONCAT(digital_inventory.jobname, ".pdf")
    LEFT JOIN `cpod_live`.`customers` ON customers.customers_id = products.cID
ORDER BY `DM_Server`.`Jobs`.Jobs_StartTime DESC LIMIT 50

The LEFT JOINs in dieser Abfrage geben alle Zeilen aus der linken Tabelle („Jobs“) und nur die passenden Zeilen aus den rechten Tabellen zurück. Das heißt, auch wenn in den richtigen Tabellen keine passende Zeile vorhanden ist, wird die Zeile aus „Jobs“ dennoch in das Ergebnis einbezogen.

Visuelle Darstellung von Joins

Unten finden Sie visuelle Darstellungen von INNER JOIN und LEFT JOIN:

INNER JOIN:

              TABLE 1               TABLE 2
+-----------+------+  +-----------+------+
| Column 1  | KEY  |  | Column 3  | KEY  |
+-----------+------+  +-----------+------+
| ROW 1.1   | 1    |  | ROW 2.1   | 1    |
| ROW 1.2   | 2    |  |           |      |
|           |      |  | ROW 2.2   | 2    |
+-----------+------+  +-----------+------+

Result:
| Column 1 | Column 3 |
+-----------+-----------+
| ROW 1.1   | ROW 2.1   |
| ROW 1.2   | ROW 2.2   |

LEFT JOIN:

              TABLE 1               TABLE 2
+-----------+------+  +-----------+------+
| Column 1  | KEY  |  | Column 3  | KEY  |
+-----------+------+  +-----------+------+
| ROW 1.1   | 1    |  | ROW 2.1   | 1    |
| ROW 1.2   | 2    |  |           |      |
| ROW 1.3   | 3    |  |           |      |
+-----------+------+  +-----------+------+

Result:
| Column 1 | Column 3 |
+-----------+-----------+
| ROW 1.1   | ROW 2.1   |
| ROW 1.2   | NULL      |
| ROW 1.3   | NULL      |

Das obige ist der detaillierte Inhalt vonWas ist der Hauptunterschied zwischen MySQL JOIN und LEFT JOIN?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn