76 votes

Différence dans MySQL JOIN vs LEFT JOIN

J'ai cette requête inter-bases de données...

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

il fonctionne bien jusqu'à ce que je les fasse LEFT JOIN s. Je pensais qu'en ne spécifiant pas de type de jointure, on supposait que c'était une LEFT JOIN . N'est-ce pas le cas ?

195voto

Mark Byers Points 318575

Je pensais qu'en ne spécifiant pas de type de jointure, on supposait qu'il s'agissait d'une JOINTURE GAUCHE. Est-ce que ce n'est pas le cas ?

Non, la jointure par défaut est un INNER JOIN.

Voici une explication visuelle des jointures SQL .

Jointure interne

enter image description here

Jointure gauche

enter image description here

0 votes

Par Cross-database, le TS veut probablement dire que sa requête utilise des tables provenant de plusieurs bases de données.

2 votes

Y a-t-il une raison particulière pour laquelle un LEFT JOIN serait tellement plus lent qu'un INNER JOIN ?

4 votes

@Webnet : Il pourrait potentiellement retourner plus de lignes. Cela pourrait, dans certaines situations, le rendre plus lent.

14voto

Lex Points 5801

Non. Lorsqu'un type n'est pas spécifié, un fichier de type INNER JOIN est utilisé. Pour en savoir plus sur les différences ; wikipedia

11voto

Andrew Points 4058

Je crois que la valeur par défaut est INNER JOIN si vous spécifiez simplement JOIN .

9voto

Java Points 1068

Si vous mentionnez simplement JOIN dans la requête, par défaut, il sera considéré comme étant comme un INNER JOIN.

Jointure à gauche : La jointure à gauche prend tous les éléments de la table de gauche et seulement les enregistrements correspondants de la table de droite comme suiveurs. Exemple :

SELECT column_name(s)
FROM table_name1 #(Left table)
LEFT JOIN table_name2 #(Right table)
ON table_name1.column_name=table_name2.column_name

J'espère que cela vous aidera.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X