MySQL 左连接

MySQL 左连接

MySQL中的LEFT JOIN用于从多个表中查询记录。这个语句与INNER JOIN语句类似,可以在FROM关键字后的SELECT语句中使用。当我们使用LEFT JOIN语句时,它会返回第一个(左侧)表中的所有记录,即使在第二个(右侧)表中没有找到匹配的记录。如果在右侧表中找不到任何匹配的记录,它将返回空值。

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

我们可以通过以下的可视化表示来理解,左连接返回左表中的所有记录和右侧表中的匹配记录:

MySQL 左连接

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

MySQL 左连接

表格:订单

MySQL 左连接

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

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

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

MySQL 左连接

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 左连接

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;

上述语句将产生以下输出:

MySQL 左连接

左连接与WHERE子句

WHERE子句用于从表中返回 过滤结果 。以下示例说明了如何使用左连接子句实现这一点:

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

这个语句给出了如下结果:

MySQL 左连接

MySQL LEFT JOIN多个表

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

MySQL 左连接

执行以下语句以连接三个表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;

在上面查询成功执行后,它将提供以下输出:

MySQL 左连接

使用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 左连接

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;

它将返回以下输出:

MySQL 左连接

ON条件

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

它将产生以下输出:

MySQL 左连接

注意:内连接子句中的WHERE和ON条件始终返回相等的结果。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程