MySQL JOIN与LEFT JOIN的区别

80

我有一个跨数据库的查询...

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

一切都很顺利,直到我将它们改为 LEFT JOIN。我认为如果不指定连接类型,就默认为 LEFT JOIN。难道这不是这样吗?

4个回答

200
我曾认为,如果不指定连接类型,它会被默认为左连接。但这不是事实。
默认的连接类型是内连接(INNER JOIN)。
这里提供了SQL连接类型的视觉解释
内连接(Inner join): enter image description here 左连接(Left join): enter image description here

通过跨数据库,TS可能意味着他的查询使用了多个数据库中的表。 - user254875486
2
一个 LEFT JOIN 比一个 INNER JOIN慢很多的原因是什么? - Ben
4
@Webnet: 它有可能返回更多的行。在某些情况下,这可能会导致它变得更慢。 - Mark Byers

14

没有指定类型时,将使用 INNER JOIN。如需了解差异,请参阅维基百科


11

如果您只指定JOIN,则默认为INNER JOIN


9

如果您在查询中只提到JOIN,默认情况下它将被视为INNER JOIN。

左连接:左连接将从左表中获取所有元素,以及右表中的匹配记录,如下所示。 例子:

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

希望这能帮助到您。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接