📜  MySQL左联接

📅  最后修改于: 2020-11-18 03:17:02             🧑  作者: Mango

MySQL左联接

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

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

我们可以通过以下可视化表示来理解它,其中“左联接”返回左侧表中的所有记录,而仅返回右侧表中的匹配记录:

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”:

表:客户

表:订单

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

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 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子句

左联接也可以与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”,其中包含以下数据:

执行以下语句以加入三个表的客户,订单和联系人:

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子句之间的区别

在左联接中,条件WHERE和ON给出不同的结果。我们可以查看以下查询以了解它们之间的差异:

条款

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

它将返回以下输出:

开子句

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

它将给出以下输出:


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