程序员社区

MySQL系列教程 --- 73、MySQL 中的 左连接

MySQL 中的 Left Join 用于从多个表中查询记录。该子句类似于 Inner Join 子句,可以与紧跟在 FROM 关键字之后的 SELECT 语句一起使用。当我们使用 Left Join 子句时,它将返回第一个(左侧)表中的所有记录,甚至从第二个(右侧)表中找不到匹配的记录。如果它不会从右侧表中找到任何匹配记录,则返回 null。

换句话说,Left Join 子句返回左表中的所有行和右表中匹配的记录,如果没有找到匹配的记录,则返回 Null。此 Join 也可以称为Left Outer Join子句。因此,Outer 是与 Left Join 一起使用的可选关键字。

我们可以通过以下直观表示来理解它,其中 Left Joins 返回左侧表中的所有记录,仅返回右侧表中的匹配记录:

file

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

file

表:orders

file

要从两个表中选择记录,请执行以下查询:

SELECT customers.customer_id, cust_name, price, date  
FROM customers  
LEFT JOIN orders ON customers.customer_id = orders.customer_id;  

成功执行查询后,它将给出以下输出:

file

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);  

上面的语句将给出以下输出:

file

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;  

上面的语句将给出以下输出:

file

用 WHERE 子句左连接

WHERE 子句用于从表中返回过滤结果。以下示例使用 Left Join 子句说明了这一点:

SELECT customer_id, cust_name, occupation, price, date  
FROM customers  
LEFT JOIN orders   
USING(customer_id) WHERE price>2500;  

该语句给出了以下结果:

file

MySQL LEFT JOIN 多表

我们已经创建了两个名为“ customers”和“ orders”的表。让我们再创建一张表并将其命名为“ contacts”,其中包含以下数据:

file

执行以下语句将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;

成功执行上述查询后,它将给出以下输出:

file

使用 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 ;  

上述语句返回以下输出:

file

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;  

它将给出以下返回的输出:

file

ON条款

SELECT cust_name, occupation, order_id, price, date  
FROM customers LEFT JOIN orders ON price=2500;  

它将给出以下输出:

file

注意: Inner Join 子句中的 WHERE 和 ON 条件总是返回等效的结果。

赞(0) 打赏
未经允许不得转载:IDEA激活码 » MySQL系列教程 --- 73、MySQL 中的 左连接

一个分享Java & Python知识的社区