MySQL JOIN与LEFT JOIN的区别


69

我有这个跨数据库查询...

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。不是这样吗?

Answers:


181

我认为通过不指定联接类型可以认为是左联接。不是这样吗?

不,默认联接是INNER JOIN。

这是SQL连接的直观说明

内部联接

在此处输入图片说明

左联接

在此处输入图片说明


通过跨数据库,TS可能意味着他的查询使用了来自多个数据库的表。
rael_kid 2012年

2
为什么有一个LEFT JOIN比a慢得多的大原因INNER JOIN
Webnet 2012年

4
@Webnet:它可能返回更多行。在某些情况下,这可能会使其变慢。
Mark Byers 2012年


10

我相信默认值是INNER JOIN如果您仅指定JOIN


8

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

左联接:左联接将采用Left表中的所有元素,并且仅将Right表中的匹配记录作为Follows。例:

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

希望这可以帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.