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!