当前位置:网站首页 > 技术博客 > 正文

mysql左连接查询例子



在本教程中,您将了解MySQL 子句以及如何将其应用于从两个或多个数据库表查询数据。

MySQL 子句允许您从两个或多个数据库表查询数据。子句是SELECT语句的可选部分,出现在子句之后。

我们假设要从两个表和查询数据。以下语句说明了连接两个表的子句的语法:

 

当使用子句将表加入表时,如果来自左表的行与基于连接条件()的右表匹配,则该行将被包含在结果集中。

如果左表中的行与右表中的行不匹配,则还将选择左表中的行并与右表中的“”行组合。“”行对于子句中的所有相应列都包含值。

换句话说,子句允许您从匹配的左右表中查询选择行记录,连接左表()中的所有行,即使在右表()中找不到匹配的行也显示出来,但使用值代替。

下图可帮助您可视化子句的工作原理。 两个圆圈之间的交点是两个表中匹配的行,左圆的剩余部分(白色部分)是表中不存在表中任何匹配行的行。 因此,左表中的所有行都包含在结果集中。

请注意,如果这些子句在查询中可用,返回的行也必须与WHERE和HAVING子句中的条件相匹配。

2.1 使用MySQL LEFT JOIN子句来连接两个表

我们来看看在示例数据库(yiibaidb)中的两个表:订单表和客户表,两个表的 ER 图如下所示 -

在上面的数据库图中:

  • 订单()表中的每个订单必须属于客户()表中的客户。
  • 客户()表中的每个客户在订单()表中可以有零个或多个订单。

要查询每个客户的所有订单,可以使用子句,如下所示:

 

执行上面查询语句,得到以下结果(部分) -

 

左表是表,因此,所有客户都包含在结果集中。 但是,结果集中有一些行具有客户数据,但没有订单数据。如:列值为:,等。这些行中的订单数据为。也就是说这些客户在表中没有任何订单(未购买过任何产品)。

因为我们使用相同的列名()来连接两个表,所以可以使用以下语法使查询更短:

 

在上面查询语句中,下面的子句 -

 

相当于 -

 

如果使用INNER JOIN子句替换子句,则只能获得至少有下过一个订单的客户。

2.2 使用MySQL LEFT JOIN子句来查找不匹配的行

当您想要找到右表中与不匹配的左表中的行时,子句非常有用。要查询两个表之间的不匹配行,可以向SELECT语句添加一个WHERE子句,以仅查询右表中的列值包含值的行。

例如,要查找没有下过订单的所有客户,请使用以下查询:

 

执行上面查询语句,得到以下结果 -

 

请参见以下示例。

 

在本示例中,我们使用子句来查询表和表中的数据。 该查询返回订单号为的订单及其购买产品明细信息(如果有的话)。

 

但是,如果将条件从子句移动到子句:

 

想想上面代码将会输出什么结果 -

 

请注意,对于INNER JOIN子句,子句中的条件等同于子句中的条件。

在本教程中,我们解释了MySQL 子句,并向您展示了如何将使用它来从多个数据库表中查询数据。


上一篇: MySQL WHERE语句 下一篇: MySQL插入数据

  • 上一篇: 算力100k
  • 下一篇: sscom串口调试使用方法
  • 版权声明


    相关文章:

  • 算力100k2024-12-26 08:29:59
  • linux include 环境变量2024-12-26 08:29:59
  • 如何搭建uvm验证平台2024-12-26 08:29:59
  • sql触发器的使用及语法2024-12-26 08:29:59
  • 用c语言实现循环队列2024-12-26 08:29:59
  • sscom串口调试使用方法2024-12-26 08:29:59
  • 电驴官方网站下载软件2024-12-26 08:29:59
  • nginx问题处理2024-12-26 08:29:59
  • java inetaddress.getbyname2024-12-26 08:29:59
  • 微信虚拟定位免费版哪个软件好用2024-12-26 08:29:59