Maison >base de données >tutoriel mysql >Quelle est la principale différence entre MySQL JOIN et LEFT JOIN ?

Quelle est la principale différence entre MySQL JOIN et LEFT JOIN ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-16 13:05:03466parcourir

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

Comprendre la différence entre MySQL JOIN et LEFT JOIN

MySQL JOIN est une opération fondamentale qui combine les lignes de deux tables ou plus en fonction d'un colonne commune. Par défaut, MySQL effectue des INNER JOIN, qui renvoient uniquement les lignes qui correspondent dans toutes les tables jointes.

Cependant, un malentendu courant survient lorsque les utilisateurs supposent que l'absence d'un type de jointure explicite implique un LEFT JOIN. Ce n'est pas le cas ; le type de jointure par défaut reste INNER JOIN.

Exemple de LEFT JOIN vs INNER JOIN

Considérez la requête suivante :

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

Cette requête effectue un INNER JOIN sur toutes les tables, renvoyant uniquement les lignes qui ont des valeurs correspondantes dans toutes les tables jointes tables.

Maintenant, modifions la requête pour utiliser les LEFT JOIN :

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

Les LEFT JOIN de cette requête renvoient toutes les lignes de la table de gauche ("Jobs") et uniquement les lignes correspondantes des bonnes tables. Cela signifie que même s'il n'y a pas de ligne correspondante dans les bons tableaux, la ligne de « Jobs » sera toujours incluse dans le résultat.

Représentation visuelle des jointures

Vous trouverez ci-dessous des représentations visuelles de INNER JOIN et LEFT JOIN :

INNER REJOINDRE :

              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   |

REJOINDRE À GAUCHE :

              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      |

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn