MySQL 左连接
MySQL中的LEFT JOIN用于从多个表中查询记录。这个语句与INNER JOIN语句类似,可以在FROM关键字后的SELECT语句中使用。当我们使用LEFT JOIN语句时,它会返回第一个(左侧)表中的所有记录,即使在第二个(右侧)表中没有找到匹配的记录。如果在右侧表中找不到任何匹配的记录,它将返回空值。
换句话说,LEFT JOIN子句返回左表中的所有行和匹配的右表记录,如果没有找到匹配的记录,则返回Null。这个Join也可以称为 Left Outer Join 子句。因此,Outer是可选的关键字,可以与LEFT JOIN一起使用。
我们可以通过以下的可视化表示来理解,左连接返回左表中的所有记录和右侧表中的匹配记录:
MySQL LEFT JOIN 语法
以下语法解释了 Left Join 子句用于连接两个或多个表:
SELECT columns
FROM table1
LEFT [OUTER] JOIN table2
ON Join_Condition;
在上面的语法中, table1 是左表,而 table2 是右表。这个子句根据指定的 join条件 返回table1的所有记录和table2的匹配记录。
MySQL LEFT JOIN示例
让我们通过一些示例来了解左连接或左外连接子句的工作原理:
用于连接两个表的LEFT JOIN子句
这里,我们将创建两个表“ customers” 和“ orders” ,这些表包含以下数据:
表:customers
表格:订单
要从两个表中选择记录,请执行以下查询:
SELECT customers.customer_id, cust_name, price, date
FROM customers
LEFT JOIN orders ON customers.customer_id = orders.customer_id;
执行查询成功后,它将会给出以下输出:
MySQL使用USING子句进行左连接
表示客户和订单都有相同的列名,即customer_id。在这种情况下,可以使用MySQL使用USING子句与左连接一起访问记录。以下语句使用LEFT JOIN子句和USING关键字返回客户ID,客户名称,职业,价格和日期。
SELECT customer_id, cust_name, occupation, price, date
FROM customers
LEFT JOIN orders USING(customer_id);
上述语句将产生以下输出:
MySQL LEFT JOIN和GROUP BY子句组合使用
使用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子句用于从表中返回 过滤结果 。以下示例说明了如何使用左连接子句实现这一点:
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左连接中WHERE和ON子句的区别
在左连接中,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;
它将产生以下输出:
注意:内连接子句中的WHERE和ON条件始终返回相等的结果。