MySQL JOIN与LEFT JOIN的区别

Web*_*net 65 mysql inner-join query-optimization 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`
        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
Run Code Online (Sandbox Code Playgroud)

它运行良好,直到我做它们LEFT JOIN.我认为通过不指定一种类型的连接,它被认为是一种LEFT JOIN.这不是这种情况吗?

Mar*_*ers 171

我认为通过不指定连接类型,它被假定为LEFT JOIN.这不是这种情况吗?

不,默认联接是INNER JOIN.

这是SQL连接的可视化解释.

内部联接

在此输入图像描述

左连接

在此输入图像描述

  • @Webnet:它可能会返回更多行.在某些情况下,这可能会导致速度变慢. (4认同)
  • 有一个很重要的原因,为什么`LEFT JOIN`会比`INNER JOIN'慢得多? (2认同)

rae*_*kid 13

不是INNER JOIN.未指定类型时,使用a.阅读差异; 维基百科


Fla*_*ash 10

我相信默认是INNER JOIN你只是指定JOIN.


Jav*_*ava 8

如果你刚才在查询中提到了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
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.