MySQL JOIN与LEFT JOIN的区别

时间:2012-03-19 12:39:48

标签: mysql query-optimization left-join inner-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

它运行正常,直到我将它们LEFT JOIN s。我认为通过不指定连接类型,它被假定为LEFT JOIN。情况不是这样吗?

4 个答案:

答案 0 :(得分:167)

  

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

不,默认联接是INNER JOIN。

这是a visual explanation of SQL joins

内部联接

enter image description here

左连接

enter image description here

答案 1 :(得分:13)

没有。如果未指定类型,则使用INNER JOIN。阅读差异; wikipedia

答案 2 :(得分:9)

如果您只指定INNER JOIN,我相信默认值为JOIN

答案 3 :(得分: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

希望这有帮助。