MySQL 中的 Left Join 用于从多个表中查询记录。该子句类似于 Inner Join 子句,可以与紧跟在 FROM 关键字之后的 SELECT 语句一起使用。当我们使用 Left Join 子句时,它将返回第一个(左侧)表中的所有记录,甚至从第二个(右侧)表中找不到匹配的记录。如果它不会从右侧表中找到任何匹配记录,则返回 null。
换句话说,Left Join 子句返回左表中的所有行和右表中匹配的记录,如果没有找到匹配的记录,则返回 Null。此 Join 也可以称为Left Outer Join子句。因此,Outer 是与 Left Join 一起使用的可选关键字。
我们可以通过以下直观表示来理解它,其中 Left Joins 返回左侧表中的所有记录,仅返回右侧表中的匹配记录:
MySQL LEFT JOIN 语法
以下语法解释了用于连接两个或多个表的 Left Join 子句:
SELECT columns
FROM table1
LEFT [OUTER] JOIN table2
ON Join_Condition;
在上面的语法中,table1是左边的表,table2是右边的表。该子句根据指定的连接条件返回 table1 中的所有记录和 table2 中匹配的记录。
MySQL LEFT JOIN 示例
让我们举一些例子来理解 Left Join 或 Left Outer Join 子句的工作:
用于连接两个表的 LEFT JOIN 子句
在这里,我们将创建两个表“ customers”和“ orders”,其中包含以下数据:
表:customers
表:orders
要从两个表中选择记录,请执行以下查询:
SELECT customers.customer_id, cust_name, price, date
FROM customers
LEFT JOIN orders ON customers.customer_id = orders.customer_id;
成功执行查询后,它将给出以下输出:
MySQL LEFT JOIN 与 USING 子句
表customers 和orders 具有相同的列名,即customer_id。在这种情况下,MySQL Left Join 也可以与 USING 子句一起使用来访问记录。以下语句使用带有 USING 关键字的 Left Join 子句返回客户 ID、客户名称、职业、价格和日期。
SELECT customer_id, cust_name, occupation, price, date
FROM customers
LEFT JOIN orders USING(customer_id);
上面的语句将给出以下输出:
MySQL LEFT JOIN 与 Group By Clause
Left Join 也可以与 GROUP BY 子句一起使用。以下语句使用 Left Join 子句和 GROUP BY 子句返回客户 ID、客户名称、资格、价格和日期。
SELECT customers.customer_id, cust_name, qualification, price, date
FROM customers
LEFT JOIN orders ON customers.customer_id = orders.customer_id
GROUP BY price;
上面的语句将给出以下输出:
用 WHERE 子句左连接
WHERE 子句用于从表中返回过滤结果。以下示例使用 Left Join 子句说明了这一点:
SELECT customer_id, cust_name, occupation, price, date
FROM customers
LEFT JOIN orders
USING(customer_id) WHERE price>2500;
该语句给出了以下结果:
MySQL LEFT JOIN 多表
我们已经创建了两个名为“ customers”和“ orders”的表。让我们再创建一张表并将其命名为“ contacts”,其中包含以下数据:
执行以下语句将customers、orders和contacts这三个表连接起来:
SELECT customers.customer_id, cust_name, order_id, price, cellphone
FROM customers
LEFT JOIN contacts ON customer_id = contact_id
LEFT JOIN orders ON customers.customer_id = orders.customer_id ORDER BY income;
成功执行上述查询后,它将给出以下输出:
使用 LEFT JOIN 子句获取不匹配的记录
LEFT JOIN 子句在我们想要获取表中不包含来自另一个表的任何匹配数据行的记录的情况下也很有用。
我们可以通过以下示例来理解它,该示例使用 LEFT JOIN 子句查找没有手机号码的客户:
SELECT customer_id, cust_name, cellphone, homephone
FROM customers
LEFT JOIN contacts ON customer_id = contact_id
WHERE cellphone IS NULL ;
上述语句返回以下输出:
MySQL LEFT JOIN 中 WHERE 和 ON 子句的区别
在 LEFT Join 中,条件 WHERE 和 ON 给出不同的结果。我们可以查看以下查询以了解它们的区别:
WHERE 条款
SELECT cust_name, occupation, order_id, price, date
FROM customers
LEFT JOIN orders
USING(customer_id) WHERE price=2500;
它将给出以下返回的输出:
ON条款
SELECT cust_name, occupation, order_id, price, date
FROM customers LEFT JOIN orders ON price=2500;
它将给出以下输出:
注意: Inner Join 子句中的 WHERE 和 ON 条件总是返回等效的结果。